匯入和匯出
您可以使用兩個方法,將公用符號匯入至應用程式或從 DLL 匯出函式:
在建置 DLL 時使用模組定義 (.def) 檔
在主應用程式的函式定義中使用 __declspec(dllimport) 或 __declspec(dllexport) 關鍵字
使用 .def 檔
模組定義 (.def) 檔是文字檔,包含一或多個模組陳述式,說明 DLL 的各種屬性 (Attribute)。 如果您不使用 __declspec(dllimport) 或 __declspec(dllexport) 來匯出 DLL 的函式,DLL 就需要使用 .def 檔。
使用 __declspec
Visual C++ 使用 __declspec(dllimport) 和 __declspec(dllexport) 來取代先前用於 16 位元版 Visual C++ 的 __export 關鍵字。
您並不需要用 __declspec(dllimport) 來正確編譯程式碼,但是如果使用了可以讓編譯器產生更佳的程式碼。 編譯器可以產生較佳的程式碼,因為它能判斷函式是否存在於 DLL 中,這可以讓編譯器產生略過一層間接取值 (Indirection,通常出現在跨越 DLL 邊界的函式呼叫) 的程式碼。 不過您必須使用 __declspec(dllimport),匯入在 DLL 中使用的變數。
有了適當的 .def 檔 EXPORTS 區段,就不需要 __declspec(dllexport)。 __declspec(dllexport) 的加入,是為了提供簡便的方式,從 .exe 或 .dll 檔匯出函式而不使用 .def 檔。
Win32 的可攜執行格式 (Portable Executable Format) 是設計成將匯入會影響到的頁數降到最低。 為了達到這個目的,它將任何程式的所有匯入位址置於一個位置,稱為匯入位址表 (Import Address Table)。 如此可讓載入器在存取這些匯入時,只需要變更一頁或兩頁即可。