日期:2014-05-18  浏览次数:20757 次

调用C++DLL的时候如何转换char**参数阿
C++中定义的方法
extern "C"{
_declspec(dllexport) bool ST_GetImageFromVideo(const char* videoPath,char** pBuf,unsigned int& nSize,int& nWidth,int& nHeight);
};

char** pBuf是个位图的数组,在C#中调用这个方法的时候,怎么处理char**字段阿?


------解决方案--------------------
参考http://www.cnblogs.com/shudingbo/archive/2010/09/03/1816657.html
http://blog.csdn.net/emailqjc/article/details/6704435
------解决方案--------------------
是这个函数内部分配了内存把指针传出还是让调用方分配好内存在函数内部写入?
如果是第一种就
ST_GetImageFromVideo(...,ref Intptr pBuf, ......)
IntPtr p = IntPtr.Zero;
ST_GetImageFromVideo(..., ref p, ...);
byte[] arr = new byte[nSize];
Marshal.Copy(p, arr, 0, nSize);
------解决方案--------------------
2#的代码差不多了
不过应该是IntPtr p = new IntPtr();
还有[DllImport("...dll", CallingConvention = CallingConvention.Cdecl)]