2011-02-13 68 views
1

我有一個dll,裏面定義了一些方法和變量。我標記爲導出dll類和函數,並將它們導入到Win32應用程序

__declspec(dllexport) 

和我在同一個解決方案中的一個win32應用程序項目內導入.h頭。我可以使用這些函數,但是當我嘗試編譯該項目時,我有很多外部符號未解決的錯誤。爲什麼?

回答

2

請閱讀使用宏是爲了這個非常普通的任務在這裏的標準方式: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++ - >預處理 - >預處理器定義

2

對於要進口該類應用程序,則需要將類標記爲

__declspec(dllimport) 

而不是dllexport

您還必須確保鏈接到DLL的導入庫(.lib文件)。

+0

我有dll項目和win32項目在同一個解決方案下,我已經添加到包含路徑字段我的dll項目的路徑,但我仍然有錯誤。爲什麼? – Stefano 2011-02-13 13:06:25

+0

你做了我的答案的第二部分(鏈接到.lib)嗎?轉到項目依賴關係,並讓您的EXE依賴於DLL,這應該爲您完成。 – tenfour 2011-02-13 13:07:28