C# DllImport方法是';t接收数据

C# DllImport方法是';t接收数据,c#,c++,C#,C++,在这里,我可以在pImageBuffer中接收图像数据,并进行一些图像处理 就像我在c#like中尝试的那样 这里给出了一些未处理的异常。。。。。希望问题在字节[]中,但我不能指出。。。 请帮助我克服它。。。。提前谢谢 这里它应该返回ppImageBuffer中的imagedata。。。但在这里它只给出了零字节我注意到的一件事是你的CreateImageSnapshot的C#声明。因为C++代码是正确的,第三个参数必须是字节**。但是在C中,第三个参数是byte[],感觉像是不兼容的类型。我建议

在这里,我可以在pImageBuffer中接收图像数据,并进行一些图像处理

就像我在c#like中尝试的那样

这里给出了一些未处理的异常。。。。。希望问题在字节[]中,但我不能指出。。。 请帮助我克服它。。。。提前谢谢


这里它应该返回ppImageBuffer中的imagedata。。。但在这里它只给出了零字节

我注意到的一件事是你的CreateImageSnapshot的C#声明。因为C++代码是正确的,第三个参数必须是字节**。但是在C中,第三个参数是byte[],感觉像是不兼容的类型。

我建议您将
byte**
封送为
ref IntPtr
。 你的声明是:

 [DllImport("PlayerLib")]
   public static extern int CreateImageSnapshot(int iPlayerRef, eImageFormat imgFormat,byte[] ppImageBuffer);


byte[] bte ;
CreateImageSnapshot(iPlayerref,eImageFormat.ePNG,bte);

顺便说一句,各位,我的英语很抱歉;)

你能准确地粘贴引发的异常吗?还有,在哪个行号上只接收零字节的数据这是个问题,我对C#part一无所知,但你一定要检查WriteFile()的返回值,以检查它是否失败。在不知道引发了什么异常的情况下,很难猜出你遇到了什么问题。我怎样才能调用这个函数byte[]bte;CreateImageSnapshot(iPlayerref、eImageFormat.ePNG、ref bte);不正确在调用此函数之前,需要为缓冲区分配一些内存:int size=10000;int[]数组=新的int[size];IntPtr buffer=Marshal.allocTaskMem(Marshal.SizeOf(字节)*大小);副本(数组、0、缓冲区、大小);CreateImageSnapshot函数显然是分配内存的,您不必自己分配。因此,只需使用Marshal.Copy调用,并记住使用releaseMageShapshot释放缓冲区。
 [DllImport("PlayerLib")]
   public static extern int CreateImageSnapshot(int iPlayerRef, eImageFormat imgFormat,byte[] ppImageBuffer);


byte[] bte ;
CreateImageSnapshot(iPlayerref,eImageFormat.ePNG,bte);
[DllImport("PlayerLib")]  
public static extern int CreateImageSnapshot(int iPlayerRef,
                         eImageFormat imgFormat, ref IntPtr ppImageBuffer);