2012-07-10 34 views
0

我有x.h文件和y.h文件,z.c文件。 z.c包含y.h和y.h,包含x.h. 我有一個函數,需要在x.h中聲明,並在z.c中定義,因爲它需要在y.h中使用一些其他函數。調用頭文件中聲明的函數

我試過這樣

// x.h 
int foo(); 

// y.h 
#include "x.h" 

// z.c 
#include"y.h" 
int foo() { 
    blah; 
    blah; 
    return 1; 
} 

這是所有在一個項目中可以說x_y.dll,它編譯好,我有x_y.dll,x_y.lib

現在,在其他項目A_B 在一個交流文件中,我想包括xh和調用foo(); 編譯好,但我有鏈接器錯誤lnk2019和lnk1120無法解析的外部符號

我在VS2008上工作,我有路徑設置到x_y.lib位於的文件夾。

+0

我的錯誤錯誤是lnk2019和lnk1120 – sam 2012-07-10 22:53:26

+0

您是否在項目設置中設置了庫依賴項? – 2012-07-10 22:58:50

+0

是的,我做了,讓我糾正,如果我錯了,右鍵點擊project-> proporties-> General->額外的庫目錄:這裏我有路徑到lib文件 – sam 2012-07-10 23:00:50

回答

0

創建宏象這樣:

#ifndef DLL_IFACE 
#ifdef DLL_IFACE_EXPORT 
#define DLL_IFACE _declspec(dllexport) 
#else // !DLL_IFACE_EXPORT 
#define DLL_IFACE _declspec(dllimport) 
#endif // !DLL_IFACE_EXPORT 
#endif // !DLL_IFACE 

,並把這個在大家所包含的一些頭。然後,在XH:

DLL_IFACE int foo(); 

然後在ZC,啓動文件了與:

#define DLL_IFACE_EXPORT 

這將導致被宣佈爲功能「_declspec(dllexport)的」當你建立一個定義的dll功能。並且會導致函數在其他dll中被聲明爲「_declspec(dllimport)」。

dllexport告訴編譯器,給定的函數應該是dll的公共接口的一部分。它將函數放在dll的動態符號表中。 dllimport告訴編譯器該函數將在稍後通過動態鏈接被導入。

+0

函數定義是否需要包含DLL_IFACE我的意思是 DLL_IFACE int foo(){ blah; blah; return 1; } – sam 2012-07-11 13:58:17

+0

它沒有工作,謝謝 – sam 2012-07-11 15:04:57