共用方式為


匯入和匯出

您可以使用兩個方法,將公用符號匯入至應用程式或從 DLL 匯出函式:

  • 在建置 DLL 時使用模組定義 (.def) 檔

  • 在主應用程式的函式定義中使用 __declspec(dllimport)__declspec(dllexport) 關鍵字

使用 .def 檔

模組定義 (.def) 檔是文字檔,包含一或多個模組陳述式,說明 DLL 的各種屬性 (Attribute)。如果您不使用 __declspec(dllimport)__declspec(dllexport) 來匯出 DLL 的函式,DLL 就需要使用 .def 檔。

您可以使用 .def 檔匯入至應用程式從 DLL 匯出

使用 __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)。如此可讓載入器在存取這些匯入時,只需要變更一頁或兩頁即可。

您想要怎麼做?

請參閱

概念

在 Visual C++ Dll