2011-08-07 54 views
5

我對dllexport,dllimport在Windows中的C++有一些問題。假設我有一些使用dllexport導出函數的module.cppmodule.h。假設我也有moduleWrapper.cppmoduleWrapper.h,它使用dllimportmodule.cpp導入函數。dllimport和dllexport之間的鏈接

有人請解釋爲什麼我可能會錯過在我的moduleWrapper.cppmoduleWrapper.h中寫入#include module.h。我不明白鏈接程序如何知道從module.cpp功能,由於地址事先的任何解釋

+0

我們將需要更多信息。喜歡看你的進口和出口是什麼樣子。 –

+0

有沒有module.dll?和一個module.lib鏈接器? –

回答

7

據我瞭解,你有module.h中中是這樣的:

__declspec(dllexport) void f(); 

然後,你也有類似的說法在moduleWrapper.cpp:

__declspec(dllimport) void f(); 

計數爲函數聲明,使您免除任何需要module.h中包含。它通常做的方法是把下面的代碼在你的包含文件:

#ifdef PROJECTNAME_EXPORTS // (the default macro in Visual Studio) 
#define PROJECTAPI __declspec(dllexport) 
#else 
#define PROJECTAPI __declspec(dllimport) 
#endif 

然後宣佈在頭文件中像這樣的功能:

PROJECTAPI void f(); 

這樣的話,它會轉化爲DLLEXPORT當你正在編譯你的DLL時,並且dllimport在任何不屬於你的DLL部分的文件中,而且恰好在使用這個頭文件。