读书人

C#调用C++API后获得内存地址中的信息

发布时间: 2012-04-11 17:42:33 作者: rapoo

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);


农民伯伯帮你弄好这些东西了。
[解决办法]
视频监控

读书人网 >C#

热点推荐