dll中匯出函式的宣告有兩種方式:一種為在函式宣告中加上__declspec(dllexport),這裡不再舉例說明;另外一種方式是採用模組定義(.def) 檔案宣告,.def檔案為鏈結器提供了有關被鏈結程式的匯出、屬性及其他方面的資訊。
首先建立 乙個dll程式,.cpp中
然後建立乙個.def的檔案,在裡面加上
最後建立乙個測試程式:.cpp檔案如下:
說明:.def檔案的規則為:
(1)library語句說明.def檔案相應的dll;
(2)exports語句後列出要匯出函式的名稱。可以在.def檔案中的匯出函式名後加@n,表示要匯出函式的序號為n(在進行函式呼叫時,這個序號將發揮其作用);
(3).def 檔案中的注釋由每個注釋行開始處的分號 (;) 指定,且注釋不能與語句共享一行。
如果匯出 c++ 檔案中的函式,必須將修飾名放到 .def 檔案中,或者通過使用外部「c」定義具有標準 c 鏈結的匯出函式。如果需要將修飾名放到 .def 檔案中,則可以通過使用 dumpbin 工具或 /map 鏈結器選項來獲取修飾名。請注意,編譯器產生的修飾名是編譯器特定的。如果將 visual c++ 編譯器產生的修飾名放到 .def 檔案中,則鏈結到 dll 的應用程式必須也是用相同版本的 visual c++ 生成的,這樣呼叫應用程式中的修飾名才能與 dll 的 .def 檔案中的匯出名相匹配。
如果生成擴充套件 dll 並使用 .def 檔案匯出,則將下列**放在包含匯出類的標頭檔案的開頭和結尾:
#undef afx_data#define afx_data afx_ext_data// #undef afx_data#define afx_data這些**行確保內部使用的 mfc 變數或新增到類的變數是從擴充套件 dll 匯出(或匯入)的。例如,當使用 declare_dynamic 派生類時,該巨集擴充套件以將 cruntimeclass 成員變數新增到類。省去這四行**可能會導致不能正確編譯或鏈結 dll,或在客戶端應用程式鏈結到 dll 時導致錯誤。
當生成 dll 時,鏈結器使用 .def 檔案建立匯出 (.exp) 檔案和導入庫 (.lib) 檔案。然後,鏈結器使用匯出檔案生成 dll 檔案。隱式鏈結到 dll 的可執行檔案在生成時鏈結到導入庫。
請注意,mfc 本身使用 .def 檔案從 mfcx0.dll 匯出函式和類。
DLL 中 def檔案的使用
dll中匯出函式的宣告有兩種方式 一種為在函式宣告中加上 declspec dllexport 這裡不再舉例說明 另外一種方式是採用模組定義 def 檔案宣告,def檔案為鏈結器提供了有關被鏈結程式的匯出 屬性及其他方面的資訊。首先建立 乙個dll程式,cpp中 int stdcall add in...
使用Def檔案匯出Dll檔案
本文介紹如何使用def檔案製作dll。模組定義 def 檔案是包含乙個或多個描述 dll 各種屬性的 module 語句的文字檔案。如果不使用 declspec dllexport 關鍵字匯出 dll 的函式,則 dll 需要 def 檔案。def 檔案必須至少包含下列模組定義語句 步驟 1.新建乙...
使用Def檔案匯出Dll檔案
本文介紹如何使用def檔案製作dll。模組定義 def 檔案是包含乙個或多個描述 dll 各種屬性的 module 語句的文字檔案。如果不使用 declspec dllexport 關鍵字匯出 dll 的函式,則 dll 需要 def 檔案。def 檔案必須至少包含下列模組定義語句 步驟 1.新建乙...