日期:2014-05-20  浏览次数:21206 次

关于C#调用C++回调函数传指针地址参数问题。。。
关于C#调用C++回调函数传指针地址参数问题。。。

最近在项目中需要使用C++写地层的SOCKET通讯,作成通讯的DLL库。功能是:接收客户端传入的图形文件数据,然后采用回调函数将图形指针传给外部的C#程序。。。
出现了,指针异常,以及读出指针数据后乱码,以及格式不正确等错误。。请大家帮忙分析下。。

C++的回调函数的参数:
。。。。(char*pUID,char*pImageAddr,unsign int mImageSize);
pUID,为图形的唯一ID,c++传出
pImageAddr,为图形的指针启始地址,c#传入地址
mImageSize, 为图形的大小,c++传出

C#的委托参数定义为:
。。。。(string pUID,StringBuilder pImageAddr,unsign int mImageSize);
其中第二个图形地址参数,分别采用了IntPtr,ref byte,等来作为传入参数,均不正确。。。
请大家帮助下,据说要采用unsafe,以及fixed固定要传入的指针??
还有,据说在c++和c#里面二进制流不同???(c++中的图形采用byte流保存)
。。。
万分感激,谢谢。。。



------解决方案--------------------
char*pImageAddr是指向图形数据的内存区域么?
那么用byte[]试试~
------解决方案--------------------
C#中的byte[]对应C++的字节流。
------解决方案--------------------
C++的图片数据不可能是.NET的Image对象……肯定不能把这些数据直接反序列化吧……
不知道是不是包含bmp的信息头。否则的话可以新建一个MemoryStream并用你的byte[]初始化流,然后用Bitmap.FromStream来读取。试一下吧。不知道C++代码返回的具体数据格式,不好确定怎么办。