簡體   English   中英

cpp文件中是否需要__declspec(dllexport)

[英]Is __declspec(dllexport) needed in cpp files

可能是一個簡單的問題,但我只有 Linux 可以在不需要 __declspec(dllexport) 的地方測試此代碼。 在當前代碼中 __declspec(dllexport) 位於 .h 文件中的所有文件之前,但僅位於 cpp 文件中 50% 的函數之前,所以我想知道 cpp 文件中是否真的需要它們?

不,它只在標題中需要。

這是包含更多信息的鏈接

擴展 Vinay 所說的內容,我經常看到一個宏定義

#if defined(MODULENAME_IMPORT)
#define EXPORTED __declspec(dllimport)
#elif defined(MODULENAME_EXPORT)
#define EXPORTED __declspec(dllexport)
#endif

然后在你的標題中你做

void EXPORTED foo();

在執行導入/導出的項目的項目設置中相應地設置定義。

不,cpp 文件中不需要它。 僅在聲明中是必需的。

例如,如果我有一個類 CMyClass。 如果我想導出這個,那么 .h 將有

.h 服務器代碼

__declspec(dllexport) CMyClass { };

在使用此類的客戶端代碼 ie 中,您必須轉發聲明該類為

客戶端代碼

__declspec(dllimport) CMyClass;

// 使用類的代碼

您也可以在 .cpp 文件中使用模板代碼並且在 .cpp 文件中實例化,然后在實例化時需要導出定義。 但即使在這種情況下,我也看到在 .h 中這樣做也有效。 在 Windows 上,您可以使用 dumpbin.exe /exports *.dll 來查看導出了哪些簽名,Linux 中也有類似的實用程序。 這將使您了解簽名是如何導出的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM