轉載:http://www.cnblogs.com/Eashion/archive/2008/12/18/1357681.html
在VC中封裝的網絡通信模塊,在異步接收到數據時需要將內容傳遞給C#中的消息處理函數,於是便出現瞭如標題所說的情況。
C++的回調函數中有一個參數,是處理接收到的字節流的回調函數指針,定義基本如下:
typedef void (*fpDataReceived)(char *data ,int len);
其中char *data是從DLL中返回的字節流,空間已經在DLL中分配了。
下面是在C#中定義的委託
public delegate void OnDataReceived(byte[] data, int len);
下面是C#中回調函數的實現
public void getData(byte[] data, int len)
{
//結果這裏data的維數只有1,也就是說只收到一個字節。
}
問題解決如下:
1、using System.Runtime.InteropServices;
2、按如下方式定義委託:
public delegate void OnDataReceived(IntPtr pData , int len); //pData是個指針地址,對應上面的char*指針data
3、回調函數的實現如下:
public void getData(IntPtr pData , int len)
{
byte[] data = new byte[len];
Marshal.Copy(pData, data, 0, len);
//接着處理 data 裏的內容
}