[轉]c++導出函數dll供c#調用


  • 建立一個C++的Win32DLL

    這里要注意選擇"Export symbols"導出符號。點擊完成。 如下圖所示:

    VS2013建立C++ dll庫文件
  •  編寫函數

    由於項目的名稱是"TestCPPDLL",因此,會自動生成TestCPPDLL.h和TestCPPDLL.cpp兩個文件,.h文件是要導出內容的聲明文件,為了能清楚的說明問題,我們將TestCPPDLL.h和TestCPPDLL.cpp兩個文件中的所有內容都刪除,然后在TestCPPDLL.h中添加如下內容:

    VS2013建立C++ dll庫文件
  •  

    第一行代碼中定義了一個名為"TESTCPPDLL_API"的宏,該宏對應的內容是"__declspec(dllexport)"意思是將后面修飾的內容定義為DLL中要導出的內容。當然你也可以不使用這個宏,可以直接將"__declspec(dllexport)"寫在要導出的函數前面。

    第二行中的"EXTERN_C",是在"winnt.h"中定義的宏,在函數前面添加"EXTERN_C"等同於在函數前面添加extern "C",意思是該函數在編譯和連接時使用C語言的方式,以保證函數名字不變。

    第二行的代碼是一個函數的聲明,說明該函數可以被模塊外部調用,其定義實現在TestCPPDLL.cpp中,TestCPPDLL.cpp的代碼如下所示:

    VS2013建立C++ dll庫文件
  •  

    第三步:

    導出為dll

    在編譯C++DLL之前,需要做以下配置,在項目屬性對話框中選擇"C/C++"|"Advanced",將Compile AS 選項的值改為"C++"。然后確定,並編譯。

    VS2013建立C++ dll庫文件
  •  

    生成的DLL文件如下圖所示:

    VS2013建立C++ dll庫文件
  •  

    第四步:

    c#調用

    首先,添加一個C#的應用程序,如果要在C#中調用C++的DLL文件,先要在C#的類中添加一個靜態方法,並且使用DllImportAttribute對該方法進行修飾,代碼如下所示:

    VS2013建立C++ dll庫文件
  •  

    DllImport中的第一個參數是指明DLL文件的位置,第二個參數"EntryPoint"用來指明對應的C/C++中的函數名稱是什么。"extern"關鍵字表明該處聲明的這個Add方法是一個外部調用。

    該方法聲明完畢之后,就可以像調用一個普通的靜態方法一樣去使用了。

    下面是示例程序:

    VS2013建立C++ dll庫文件
  •  

    然后運行該C#程序,其結果如下圖所示:


  • 免責聲明!

    本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



     
    粵ICP備18138465號   © 2018-2025 CODEPRJ.COM