C#調(diào)用C++中回調(diào)函數(shù)資料整理

C#調(diào)用C++中回調(diào)函數(shù)資料整理

ID:37909678

大小:202.50 KB

頁數(shù):33頁

時間:2019-06-02

C#調(diào)用C++中回調(diào)函數(shù)資料整理_第1頁
C#調(diào)用C++中回調(diào)函數(shù)資料整理_第2頁
C#調(diào)用C++中回調(diào)函數(shù)資料整理_第3頁
C#調(diào)用C++中回調(diào)函數(shù)資料整理_第4頁
C#調(diào)用C++中回調(diào)函數(shù)資料整理_第5頁
資源描述:

《C#調(diào)用C++中回調(diào)函數(shù)資料整理》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在教育資源-天天文庫。

1、C#調(diào)用C++回調(diào)函數(shù)的問題http://www.21tx.com2008年10月24日virus12下一頁  C++的回調(diào)函數(shù)中有一個參數(shù)是,是返回一個字符串,原則如下:  typedef void (*TDataEvent)(char *AData ,int ALen);  其中char *AData是從DLL中返回一個字符串,串的內(nèi)存已經(jīng)在DLL中分配了  下面中我在C#中定義的委托  public delegate void TDataEvent(Byte[] AData, int ALen)

2、;  下面是回調(diào)函數(shù)的設置代碼:  Event = new clReceivelDllPoxy.TDataEvent(getDate);  ReceDllPoxy.AddServer(1024, Event, 2);  其中 Event是上面委托的實例,我定義成一個成員這樣就不會被自己釋放  下面是C#中回調(diào)函數(shù)的實現(xiàn)public void getDate(byte[] AData, int ALen){//發(fā)現(xiàn)每次回調(diào)是 AData只有一個字節(jié)}  下面轉載一個別人的代碼,謝謝usingSystem

3、;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Runtime.InteropServices;usingSystem.Reflection;usingSystem.Reflection.Emit;namespaceAppDllTest{  /**////

  ///非托管動態(tài)調(diào)用基類,基類不能直接使用,需要實現(xiàn)FunTable()的虛函數(shù)  ///  publicabstractclass

4、clDllBasePoxy  {    //-裝入DLL---------    publicboolOpen(stringdllFileName)    {      Hand=LoadLibrary(dllFileName);      if(Hand==0)      {        returnfalse;      }      FunSet(GetFunTable());      returntrue;    }     //-關閉DLL---    publicboolClose()

5、    {      returnFreeLibrary(Hand)!=0;    }    publicabstractstring[]GetFunTable();//函數(shù)對應表由外部代理類通過GetFunTable來設置    //調(diào)用Windows32下的Kernele32庫中的裝入函數(shù)來完成對非托管DLL的引用-------#region//調(diào)用Windows32下的Kernele32庫中的裝入函數(shù)來完成對非托管DLL的引用-------    //----------------------

6、----------------------------------------    [DllImport("Kernel32")]    privatestaticexternintGetProcAddress(inthandle,Stringfuncname);    [DllImport("Kernel32")]    privatestaticexternintLoadLibrary(Stringfuncname);    [DllImport("Kernel32")]    private

7、staticexternintFreeLibrary(inthandle);    privateintHand=0;//DLL的句柄    privatestaticDelegateGetAddress(intdllModule,stringfunctionname,Typet)//把指針轉變成C#的代理    {      intaddr=GetProcAddress(dllModule,functionname);      if(addr==0)      {        returnnul

8、l;      }      else      {        returnMarshal.GetDelegateForFunctionPointer(newIntPtr(addr),t);      }    }    //--關聯(lián)代理和DLL中的函數(shù)-----------    privateboolFunSet(string[]aFun)    {      Typetp=this.GetType();      string[]Value; 

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。