这是我们实现的VC ++中的c ++代码CreateImageSnapshot, (int, eImageFormat, BYTE**)
BYTE**
PlayerLib::CreateImageSnapshot (iPlayerRef,static_cast<eImageFormat>(lFormat),
&pBuffer);
这里我需要导入dll并在c#中执行相同的过程。任何人都可以找到等效的C#代码,如
[DllImport("PlayerLib", SetLastError = false,
EntryPoint = "CreateImageSnapshot")]
public static extern int CreateImageSnapshot(...);
这里我需要extern CreateImageSnapshot函数,我想知道如何传递参数
提前致谢
答案 0 :(得分:1)
正如我在上一个问题中所建议的,定义将是:
[DllImport("PlayerLib", SetLastError = false, EntryPoint = "CreateImageSnapshot")]
public static extern int CreateImageSnapshot(int player, eImageFormat imgFormat,
ref IntPtr imgBuffer);
byte[] img;
IntPtr imgBuff = new IntPtr();
int res = CreateImageSnapshot(1, eImageFormat.jpeg, ref imgBuff);
int size = ????
if (res > 0)
{
img = new byte[size];
Marshal.Copy(imgBuff, img, 0, size);
}
但是你的非托管函数不会返回缓冲区的大小。你需要在func中添加一个参数或在res中返回数组lenth。