怎么从c#里传byte[] 数据到unmanaged c++的dll里 20

有一个用opencv写的dll,里面有一个函数定义如下:voidGetHeadGesture(constunsignedchar*pImgData,int&getsure... 有一个用opencv写的dll, 里面有一个函数 定义如下:

void GetHeadGesture(const unsigned char * pImgData, int & getsureType);

现在需要在c#里调用这个DLL.在c#里定义引用如下:

[DllImport("HeadGestureDll.dll", EntryPoint = "?GetHeadGesture@@YAXPBEAAH@Z")]
private static extern void GetHeadGesture([In]byte[] pImgData, [Out] int getsureType);

在程序中用时:

int type = -2;
byte[] imageData = new byte[BufferLen];
Marshal.Copy(pBuffer, imageData, 0, BufferLen);
//pBuffer 是一个IntPtr指向存放数据的buffer, BufferLen是Buffer的长度.
GetHeadGesture(imageData, type);

这样子写编译的时候没问题. 但是在运行的时候, 就出错了. GetHeadGesture出错, DLL里发生错误: Incorect size of input array (Non-positive cols or rows) in function cvInitMatHeader

我不怎么用c#, 请各位大侠指教, 我这样写对不对. 谢谢.
我自己想办法解决了.

在c#里定义函数成这样:

[DllImport("HeadGestureDll.dll", EntryPoint = "?GetHeadGesture@@YAXPBEAAH@Z")]
private static extern void GetHeadGesture(byte[] pImgData, ref int getsureType);

然后在程序中的调用方法和上面提到的一样.这样就可以了, 在DLL里可以正常接收数据.
===================================================================================

谢谢 Kingson88.
照你说的, 我改成下面这样

现在需要在c#里调用这个DLL.在c#里定义引用如下:

[DllImport("HeadGestureDll.dll", EntryPoint = "?GetHeadGesture@@YAXPBEAAH@Z")]
private static extern void GetHeadGesture(IntPtr pImgData, [Out] int getsureType);

在程序中用时:

//pBuffer 是一个IntPtr指向存放数据的buffer, BufferLen是Buffer的长度.
GetHeadGesture(pBuffer, type);

好像还是不可以啊.
展开
 我来答
百度网友0f3f080f4
2008-11-11 · TA获得超过777个赞
知道小有建树答主
回答量:1055
采纳率:0%
帮助的人:817万
展开全部
void GetHeadGesture(const unsigned char * pImgData, int & getsureType);
pImgData这个是指种,大小32位的。你要传个指种下去。C#里的指种是IntPtr,你定义一个指种。然后这个指种指向这个数组。然后再传指种调用。我很久以前做过,。现在不大记得了,或者你把数组的第一个字节 按ref imageData【0】这样传进去试下。
[DllImport("HeadGestureDll.dll", EntryPoint = "?GetHeadGesture@@YAXPBEAAH@Z")]
private static extern void GetHeadGesture(ref byte pImgData, [Out] int getsureType); 这样不行的话一定要用IntPtr,至于怎么把这个IntPtr指种指向数组我就不记得了。你网上查下

const unsigned char * pImgData,你确定是字节数组吗?我看怎么想字符。
private static extern void GetHeadGesture(ref string pImgData, [Out] int getsureType); 很久以前做过这样的。经常试各种类型,C#调用C++主要就是类型转换比较麻烦。你去查查看C#与C++类型对照表。char 好像对于C# string
贪吃大米的老鼠
2008-11-10 · TA获得超过252个赞
知道小有建树答主
回答量:525
采纳率:0%
帮助的人:189万
展开全部
期待中
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式