我有一個dll,裏面定義了一些方法和變量。我標記爲導出dll類和函數,並將它們導入到Win32應用程序
__declspec(dllexport)
和我在同一個解決方案中的一個win32應用程序項目內導入.h頭。我可以使用這些函數,但是當我嘗試編譯該項目時,我有很多外部符號未解決的錯誤。爲什麼?
我有一個dll,裏面定義了一些方法和變量。我標記爲導出dll類和函數,並將它們導入到Win32應用程序
__declspec(dllexport)
和我在同一個解決方案中的一個win32應用程序項目內導入.h頭。我可以使用這些函數,但是當我嘗試編譯該項目時,我有很多外部符號未解決的錯誤。爲什麼?
請閱讀使用宏是爲了這個非常普通的任務在這裏的標準方式:http://wiki.tcl.tk/8721
的基本想法是,你定義一個宏,說MY_API
像這樣:
#ifdef BUILD_MYAPI
# define MY_API __declspec(dllexport)
#else
# define MY_API __declspec(dllimport)
#endif
當你聲明一個函數或類的頭文件中,你這樣做:
void MY_API myApiFunction(int x);
當你建立自己的dll聲明函數的主體上,您將BUILD_MYAPI
的定義添加到構建。這使得所有declerations是dllexport
當你包括一些其他的DLL頭,你不添加BUILD_MYAPI
所以減速是dllimport
當使用Visual Studio編譯,您可以將宏定義添加到編輯,而不改變源從項目屬性 - > C/C++ - >預處理 - >預處理器定義
對於要進口該類應用程序,則需要將類標記爲
__declspec(dllimport)
而不是dllexport
。
您還必須確保鏈接到DLL的導入庫(.lib文件)。
我有dll項目和win32項目在同一個解決方案下,我已經添加到包含路徑字段我的dll項目的路徑,但我仍然有錯誤。爲什麼? – Stefano 2011-02-13 13:06:25
你做了我的答案的第二部分(鏈接到.lib)嗎?轉到項目依賴關係,並讓您的EXE依賴於DLL,這應該爲您完成。 – tenfour 2011-02-13 13:07:28