c++基礎4:c++工程的動態鏈接庫dll的導出使用方法

c++工程生成的動態鏈接庫如果想給別的工程(包括.net工程,MFC工程等)使用,就必須遵守一些規則進行編譯導出動態庫(注意:這裏是指兩個不同的工程調用,如果同一個工程裏的函數就不用這麼做了):

下面以add函數爲例說明:

1.首先在函數定義的時候採取標準的調用約定_Stdcall(編譯器將add改名),即int _Stacall add(),該約定是pascal的標準調用約定所謂的調用約定就是編譯器按照標準將函數add改名,改名規則是在輸出函數名前加上一個下劃線前綴,後面加上一個“@”符號和其參數的字節數,格式爲_functionname@number。如函數int func(int a, double b)的修飾名是_func@12,這個步驟還有其他作用,所以不能省略,否則c#在調用該接口時會報錯)


2.新建一個def文件,將該文件添加到c++的工程中,然後在項目屬性--配置屬性--鏈接器--輸入--模塊定義文件中指定def文件的路徑(這步很重要),該文件中作用是將add函數名強制定義一個輸出的名字,使得add函數導出後名字不會改變(def文件的函數導出寫法請參照網上資料)【這部做完後就可以在c#的工程中使用c++的動態庫dll】

 

3.在MFC應用程序中先加載導出的動態庫dll需要的頭文件.h,用於聲明需要調用的函數(include “······.h”)【也可以在MFC工程右鍵--》屬性--“配置屬性”---“C/C++”---“常規”---“附加包含目錄”裏添加需要的頭文件】


4.在MFC應用程序中加載動態庫的導入庫文件,使得程序在鏈接時可以找到函數的實現地方(#pragma comment( lib,“··········.lib”)【也可以在MFC工程右鍵--》屬性--“配置屬性”---“鏈接器”---“常規”---“附加庫目錄”裏添加需要的頭文件】


5.接下來在MFC應用程序中就可以調用dll中的add函數了

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