使用 __declspec(dllexport) 從 DLL 匯出
您可以使用 關鍵詞,從 DLL __declspec(dllexport)
匯出數據、函式、類別或類別成員函式。 __declspec(dllexport)
將 export 指示詞新增至物件檔,因此您不需要使用 .def 檔案。
嘗試匯出裝飾C++函式名稱時,最明顯的便利性。 因為名稱裝飾沒有標準規格,匯出函式的名稱可能會在編譯程式版本之間變更。 如果您使用 __declspec(dllexport)
,則只需要考慮任何命名慣例變更,才需要重新編譯 DLL 和相依.exe檔案。
許多導出指示詞,例如序數、NONAME 和 PRIVATE,只能在 .def 檔案中建立,而且沒有 .def 檔案即可指定這些屬性。 不過,除了使用 .def 檔案之外,使用 __declspec(dllexport)
也不會造成建置錯誤。
若要匯出函式,如果指定關鍵詞, __declspec(dllexport)
關鍵詞必須出現在呼叫慣例關鍵詞的左邊。 例如:
__declspec(dllexport) void __cdecl Function1(void);
若要匯出類別中的所有公用數據成員和成員函式,關鍵詞必須出現在類別名稱的左邊,如下所示:
class __declspec(dllexport) CExampleExport : public CObject
{ ... class definition ... };
注意
__declspec(dllexport)
無法套用至具有呼叫慣例的 __clrcall
函式。
建置 DLL 時,您通常會建立頭檔,其中包含您要導出的函式原型和/或類別,並將其新增 __declspec(dllexport)
至頭檔中的宣告。 若要讓您的程式代碼更容易閱讀,請定義 巨集, __declspec(dllexport)
並將巨集與您要導出的每個符號搭配使用:
#define DllExport __declspec( dllexport )
__declspec(dllexport)
會將函式名稱儲存在 DLL 的匯出資料表中。 如果您想要優化數據表的大小,請參閱 依序數而非依名稱從 DLL 匯出函式。