匯入和匯出
您可以使用兩種方法,將公用符號匯入應用程式,或從 DLL 匯出函式:
建置 DLL 時,請使用模組定義 (.def) 檔案
在主要應用程式中使用 關鍵字
__declspec(dllimport)
或__declspec(dllexport)
函式定義
使用 .def 檔案
module-definition (.def) 檔案是一個文字檔,其中包含一或多個模組語句,描述 DLL 的各種屬性。 如果您不使用 __declspec(dllimport)
或 __declspec(dllexport)
匯出 DLL 的函式,DLL 需要 .def 檔案。
您可以使用 .def 檔案匯 入應用程式 ,或 從 DLL 匯出。
使用__declspec
您不需要 __declspec(dllimport)
針對程式碼正確編譯,但這樣做可讓編譯器產生更好的程式碼。 編譯器能夠產生更好的程式碼,因為它可以判斷函式是否存在於 DLL 中,這可讓編譯器產生略過通常存在於跨越 DLL 界限之函式呼叫中之間接存取層級的程式碼。 不過,您必須使用 __declspec(dllimport)
來匯入 DLL 中使用的變數。
不需要使用適當的 .def 檔案 EXPORTS 區段 __declspec(dllexport)
。 __declspec(dllexport)
已新增 ,以提供從 .exe 或 .dll 檔案匯出函式的簡單方式,而不需使用 .def 檔案。
Win32 可攜式可執行檔案格式的設計目的是將必須接觸的頁面數目降到最低,以修正匯入。 若要這樣做,它會將所有程式的匯入位址放在稱為匯入位址表的一個位置。 這可讓載入器在存取這些匯入時,只修改一或兩個頁面。