C++ Dll回調C#方法,Dll中要將字節數組傳遞給回調方法

轉載: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 裏的內容
         }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章