VC 中dll的兩種匯出方法

2021-05-23 15:38:29 字數 921 閱讀 4105

若要確定用於匯出函式的方法(.def 檔案或__declspec(dllexport)關鍵字),請回答下列問題:

在 .def 檔案中匯出函式使您得以控制匯出序號。當將附加的匯出函式新增到 dll 時,可以給它們分配更高的序號值(高於任何其他匯出函式)。當您進行此操作時,使用隱式鏈結的應用程式不必與包含新函式的新導入庫重新鏈結。這非常重要, 例如,在設計將由許多應用程式使用的第三方 dll 時。可以通過新增附加功能不斷地增強 dll,同時確保現有應用程式繼續正常使用新的 dll。mfc dll 是使用 .def 檔案生成的。

使用 .def 檔案的另乙個優點是:可以使用 noname 屬性匯出函式,該屬性僅將序號放到 dll 的匯出表中。對具有大量匯出函式的 dll,使用 noname 屬性可以減小 dll 檔案的大小。有關編寫模組定義語句的資訊,請參見模組定義語句的規則 。有關序號匯出的更多資訊,請參見按 序號而不是按名稱從 dll 匯出函式 。

如果需要將修飾名放到 .def 檔案中,則可以通過使用 dumpbin 工具或 /map 鏈結器選項來獲取修飾名。請注意,編譯器產生的修飾名是編譯器特定的。如果將 visual c++ 編譯器產生的修飾名放到 .def 檔案中,則鏈結到 dll 的應用程式必須也是用相同版本的 visual c++ 生成的,這樣呼叫應用程式中的修飾名才能與 dll 的 .def 檔案中的匯出名相匹配。

使用__declspec(dllexport)非常方便,因為不必考慮維護 .def 檔案和獲取匯出函式的修飾名。例如,如果您設計的 dll 供自己控制的應用程式使用,則此方法很適用。如果通過新的匯出函式重新生成 dll,還必須重新生成應用程式,因為如果使用不同版本的編譯器進行重新編譯,則匯出的 c++ 函式的修飾名可能會發生變化。

DLL 匯出方法(兩種)

使用 def 檔案從 dll 匯出 模組定義 def 檔案是包含乙個或多個描述 dll 各種特性的 module 語句的文字檔案。如果不使用 declspec dllexport 關鍵字匯出 dll 的函式,則 dll 需要 def 檔案。def 檔案必須至少包含下列模組定義語句 例如,包含實現二進...

Dll匯出函式的兩種方式

dll中匯出函式的宣告有兩種方式 一種方式是 在函式宣告中加上 declspec dllexport 另外一種方式是 採用模組定義 def 檔案宣告,def 檔案為鏈結器提供了有關被鏈結程式的匯出 屬性及其他方面的資訊。方式一 在函式宣告中加上 declspec dllexport 在動態鏈結庫程式...

DLL中匯出函式的兩種方式

dll中匯出函式的兩種方式 dllexport與.def檔案 2009 03 06 11 34 58 標籤 dll匯出函式 兩種方式 declspec dllexport def 檔案it 分類 程式設計技術 dll中匯出函式的宣告有兩種方式 一種方式是 在函式宣告中加上 declspec dlle...