C#中,调用的C++ DLL,在DLL中有API函数:LONG APIENTRY devwdm_GetImageBuffer(BYTE *pImageMem);函数功能: 采集一帧RGB24图像到内存
pImageMem: 图像缓冲区指针C#调用: [DllImport("devwdm.dll")]
//函数功能:采集一帧RGB24图像到内存 pImageMem:图像缓冲区指针
public static extern int devwdm_GetImageBuffer(IntPtr pImageMem);请问我怎么才能将该函数存入到内存中的图片数据读出来,并用Panel控件在Form中显示出来啊?
pImageMem: 图像缓冲区指针C#调用: [DllImport("devwdm.dll")]
//函数功能:采集一帧RGB24图像到内存 pImageMem:图像缓冲区指针
public static extern int devwdm_GetImageBuffer(IntPtr pImageMem);请问我怎么才能将该函数存入到内存中的图片数据读出来,并用Panel控件在Form中显示出来啊?
内存可以读
Marshal.ReadInt32((IntPtr)0x14F2CEC);
int len=100;
byte[] imgByte=new byte[len];
IntPtr hglobal = Marshal.AllocHGlobal(len);
devwdm_GetImageBuffer(hglobal);
pictureBox1.Image = Image.FromStream(new MemoneryStream(imgByte));//imgByte为内存数据
Marshal.FreeHGlobal(hglobal);
就是先申请一块内存区域,然后再存放你要读取的内存中的数据。
如果需要的长度是1024,那你先定义的长度小于1024的,看调用后是否还会出现尝试读取或写入受保护的内存另外你有C++的DEMO不,看下它是怎么调用的?
因为不清楚pImageMem这个参数是否要先做什么处理,然后才调用devwdm_GetImageBuffer
我是菜鸟,还望指点,感激不尽
int len=0;
IntPtr hglobal = Marshal.AllocHGlobal(len);
len=devwdm_GetImageBuffer(hglobal);
byte[] imgByte=new byte[len];
Marshal.Copy(hglobal,imgByte,0,len);
Marshal.FreeHGlobal(hglobal);
pictureBox1.Image = Image.FromStream(new MemoneryStream(imgByte));
IntPtr hglobal = Marshal.AllocHGlobal(len);
len=devwdm_GetImageBuffer(hglobal);
byte[] imgByte=new byte[len];
Marshal.Copy(hglobal,imgByte,0,len);
Marshal.FreeHGlobal(hglobal);
pictureBox1.Image = Image.FromStream(new MemoneryStream(imgByte));
int len=m_strWideth*m_strHeight*3;
BYTE* pDrawBuf=new BYTE[len];
devwdm_GetImageBuffer(pDrawBuf);
8楼的代码就可以了,长度设的一样就行,没看出有特殊的地方。APIENTRY 指明该方法是用什么样的方式调用的?stdcall,_cdcel??