DllImport方法不接收数据

时间:2009-10-29 06:26:31

标签: c# c++

BYTE* pImageBuffer = NULL;
    eResult res = PlayerLib::CreateImageSnapshot( iPlayerRef, eBMP, &pImageBuffer );
   if( res > 0 )
     { 
         ....                                    // do something with the image
          WriteFile(FileHandle, pBuffer, eRes, NULL, NULL);
          ReleaseImageSnapshot( pImageBuffer );   // free the image buffer in not longer needed!
     }

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

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

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


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

这里给出了一些unhandeld异常.....希望问题出在byte []但是我不能指出...... 请帮助我克服它....提前感谢

这里它会在ppImageBuffer中返回imagedata ...但是这里只给出零字节

2 个答案:

答案 0 :(得分:0)

向我看的一件事是CreateImageSnapshot的C#声明。由于您的C ++代码是正确的,第三个参数必须是BYTE **。但是在C#中你有第三个参数作为byte [],它感觉就像一个不兼容的类型。

答案 1 :(得分:0)

我建议您将BYTE **作为ref IntPtr进行调整。 您的声明将是:

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

P.S。对不起我的英语,伙计们;)