任何人都可以找到等效的c#代码

时间:2009-10-29 10:20:37

标签: c# pinvoke

这是我们实现的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函数,我想知道如何传递参数

提前致谢

1 个答案:

答案 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。