2009-02-17 29 views
7

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

回答

11

不,它只在標題中需要。

這是link以及更多信息。

擴大對什麼是維奈說,我經常看到的一個宏在你的頭文件中定義

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

然後你做

設置相應的定義項目的項目設置做導入/導出。

5

不,它在cpp文件中不是必需的。只有在聲明中它是必需的。

例如,如果我有一個類CMyClass。如果我想導出此則.H將有

.H Server代碼

__declspec(dllexport)的CMyClass { };

在客戶端的代碼,即,它使用這個類,你必須轉發聲明類如

客戶機代碼

__declspec(dllimport的)CMyClass;

//代碼使用類

2

您可以在.cpp文件中使用也當你有模板代碼和您在.cpp文件實例,那麼你需要導出的定義,當它被實例化。但即使在這種情況下,我也已經看到,在.h中的做法也是有效的。在Windows上,您可以使用dumpbin.exe/exports * .dll來查看導出的簽名,Linux中也有類似的實用程序。這會給你一個想法如何導出簽名。

相關問題