日期:2014-05-17  浏览次数:20965 次

C#接收DLL返回的字节流。。。
C++封装的DLL导出回调函数,回调函数返回字节流指针和长度,
C#调用DLL.

第二次进入回调函数退出时,出错。

//C++函数原型: 
int cbFun(int *pOutData, int * outDataLen)

//C#调用接口函数
public delegate int LPONGETMSG(ref IntPtr pOutData, ref int outDataLen);

byte[] pBuf = new byte[maxSize];

public int cbFun(ref IntPtr pOutData, ref int outDataLen)
{           
 Marshal.Copy(pOutData, pBuf ,0 ,outDataLen);
 // Marshal.FreeHGlobal(pBuf);
 return 0;
}

------解决方案--------------------
委托实例是不是定义的临时变量吧,定义成全局变量;
因为临时变量会被NET的进制自动回收,导致C++内部错误;
------解决方案--------------------
指针前不能加ref,不然要被C++给破坏指针值的。