2014-09-01 44 views
0

在visual studio 2008.中創建項目。現在我們想要將項目拆分成許多庫文件(DLL),但問題是我們有全局變量,它們在使用這個文件的單獨globals.h文件中,我們使用externals.h中聲明的extern關鍵字訪問整個項目的全局變量。如何創建一個具有全局變量和這些全局變量的lib文件應該將它的信息分享給另一個項目

如何跨不同庫文件共享這些全局變量信息?

globals.h externs.h 
int a=0;  extern int a; 
int b=0;  extern int b; 
...  ... 
...  ... 

注意:globals.h只在項目中包含一次。

+1

當你說「庫」時,你的意思是一個* static *庫或一個* dynamic *庫(例如一個DLL)? – 2014-09-01 06:27:29

+0

動態庫 – LearNer 2014-09-01 06:32:53

+0

閱讀本文http://msdn.microsoft.com/en-us/library/h90dkhs0(v=vs.90).aspx – Ezee 2014-09-01 07:02:31

回答

1

全局變量通常的做法是:

globals.h 
extern int a; 
extern int b; 

globals.c 
int a = 1; 
int b = 2; 

注意,變量的實際定義是在C(或CPP)文件。

如果您正在從dll導出全局變量,則必須執行其他步驟。

globals.h 
#ifdef MYDLL_EXPORTS 
#define MYDLL_API __declspec(dllexport) 
#else 
#define MYDLL_API __declspec(dllimport) 
#endif 

extern MYDLL_API int a; 
extern MYDLL_API int b; 

globals.c 
#include "globals.h" 

MYDLL_API int a = 1; 
MYDLL_API int b = 2; 

您必須在構建dll時定義MYDLL_EXPORTS。如果你從其他dll或可執行文件使用它,它必須不被定義。

__declspec(dllexport)告訴鏈接器:此符號(變量,函數,類)將被其他dll或應用程序使用。

__declspec(dllimport)告訴編譯器:這個符號不是在這個項目中定義的,而是在其他的dll中定義的。

+0

在轉換爲dll的時候,在類中聲明的靜態變量時出現錯誤....能否提供文檔或註釋,關於在Windows上使用visual studio 2008創建庫的鏈接。 – LearNer 2014-09-05 06:41:11

+0

也許http://msdn.microsoft.com/en-us/library/81h27t8c.aspx或http://stackoverflow.com/questions/3491990/c-definition-of-dllimport-static-data-member可以幫助你。 – 2014-09-05 07:31:17