[Help]C#调用DLL接收byte数组的问题。。。
//C++封装的DLL中传出参数 (CallBack*)(int *pOut); //C#调用DLL,接收int参数 CallBackFun(ref int outVal); //======================== 这样传值没有问题, 如果我通过DLL传递BYTE数组,不知道该如何封装DLL?????? //准备在C#代码接收参数 CallBackFun2(ref byte[]data);
作者: audiovideo2011 发布时间: 2011-06-16
作者: healer_kx 发布时间: 2011-06-16
作者: ghost5216 发布时间: 2011-06-16
//C++中封装DLL (CallBack*)(Byte* data); //C#中调用DLL会出异常。。。。。。 CallBackFun2(byte[] data);
作者: audiovideo2011 发布时间: 2011-06-16
CallBackFun2(aa);
作者: ghost5216 发布时间: 2011-06-16
// C++ 代码封装DLL (CallBack*)(unsigned char* pOut); // C#代码调用DLL //注册代理函数 RegisterCallBackFunc2(funcTest2); //接收消息的函数 private int funcTest2(ref byte data, ref int retVal) { //这里会提示系统错误......... return 0; }
作者: audiovideo2011 发布时间: 2011-06-16
是下面的形式会报系统错误......
C# code
//接收消息的函数 private int funcTest2(ref byte data, ref int retVal) { //这里会提示系统错误......... return 0; }
作者: audiovideo2011 发布时间: 2011-06-16
回调函数可以用委托代替
作者: ghost5216 发布时间: 2011-06-16
不明白楼主意图了
回调函数可以用委托代替
==================
用C++代码封装DLL来传出BYTE流,
然后在C#中调用这个DLL来接收消息.
有消息到来时,C#中就可以接收到消息...
作者: audiovideo2011 发布时间: 2011-06-16
作者: LOVESONGFOREVER 发布时间: 2011-06-16
=====================================
unsigned char* [MarshalAs(UnmanagedType.LPArray)]byte[]/?(Intptr)
不太明白这个是什么意思
[MarshalAs(UnmanagedType.LPArray)]byte[]
作者: audiovideo2011 发布时间: 2011-06-16
这是啥啊
作者: ghost5216 发布时间: 2011-06-16
RegisterCallBackFunc2
这是啥啊
==================
这个是用来注册代理函数的啊,在C++中注册这个函数,有数据过来就通知
下面的函数来接收...
funcTest2(ref byte data, ref int retVal)
作者: audiovideo2011 发布时间: 2011-06-16
byte[] data只接收到一个元素
private int funcTest2([MarshalAs(UnmanagedType.LPArray)] byte[] data,
ref int retVal)
作者: audiovideo2011 发布时间: 2011-06-16
private int funcTest2(ref [MarshalAs(UnmanagedType.LPArray)] byte[] data, ref int retVal)
作者: audiovideo2011 发布时间: 2011-06-16
RegisterCallBackFunc2 的参数是这个委托
然后调用RegisterCallBackFunc2 的时候用funcTest2作为参数传递
作者: ghost5216 发布时间: 2011-06-16
先声明一个和funcTest2相同特种图的委托
RegisterCallBackFunc2 的参数是这个委托
然后调用RegisterCallBackFunc2 的时候用funcTest2作为参数传递
==================
是按照这个顺序来弄的,
用下面的代码接收int类型的数据是可以的.
C# code
//C++封装的DLL中传出参数 (CallBack*)(int *pOut); //C#调用DLL,接收int参数 CallBackFun(ref int outVal);
作者: audiovideo2011 发布时间: 2011-06-16
C#函数这样来接收,也是接收不到数据, byte[] data只接收到一个元素 但是加 ref后, 编译会有错误。 private int funcTest2([MarshalAs(UnmanagedType.LPArray)] byte[] data, ref int retVal) 这个参数前面不可以再加 ref了么? 使用指针也接收不到消息,UIntPtr data
作者: audiovideo2011 发布时间: 2011-06-16
作者: ghost5216 发布时间: 2011-06-16