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

C#调用C++API后,获得内存地址中的信息。求助高人!分数不够开贴再加
有C++做的dll,描述如下:

C/C++ code
BOOL PlayM4_GetBMP(LONG nPort,PBYTE pBitmap,DWORD nBufSize,DWORD* pBmpSize);
/*说明: 抓取bmp图像
参数: nPort: 通道号
pBitmap: 存放BMP图像数据地址,由用户分配,不得小于bmp图像大小,即sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER) + w * h * 4, 其中w和h分别为图像宽高。
nBufSize: 申请的缓冲区大小。
pBmpSize: 获取到的实际bmp图像大小。
返回值: TRUE: 获取成功
FALSE: 获取失败 */


这是一个播放器的调用接口,用于抓取播放图像。
我的问题是如何调用此函数,并得到抓取到的bmp图像。

事实上我调用已经“成功”,但是不知道如何从内存中拿到图像,我调用的方法如下
C# code
[DllImport("PlayCtrl.dll")]
private static extern bool PlayM4_GetBMP(Int32 _Port,System.UInt16[] pBitmap,System.UInt32 nBufSize,out Int32 pBmpSize);



各位高人,我调用的方法是否正确,我该怎么做才能得到图像呢?

------解决方案--------------------
System.UInt16[] System.UInt16[] pBitmap应该就是图片。转化为 MemoryStream.

MemoryStream stram = new MemoryStream(pBitmap);

(如果编译器说格式不对,可以转成 byte[],反正都是同一样的东西)

然后用 Image.FromStream(stream) 试试

ps: 不保证正确
------解决方案--------------------
http://www.cnblogs.com/over140/archive/2009/03/16/1410262.html
这里肯定有你要的答案。

[DllImport("PlayCtrl.dll")]
private static extern bool PlayM4_GetBMP(Int32 _Port,System.UInt16[] pBitmap,System.UInt32 nBufSize,out Int32 pBmpSize);


农民伯伯帮你弄好这些东西了。
------解决方案--------------------
视频监控