[英]using global variable in dll and exe
我在公共头文件中有一个全局变量。 例如
commonHeader.h
int commonInt = 0;
我有3个dll项目要在其中使用,因此我包含上面的标头,但是它给了我多次定义的错误符号,#pragma一次也行不通。
如果我使上述变量extern,并在我的exe中定义它,我的dll中会出现链接器错误。
我所有的dll需要上面的标头。 我的一个dll需要其他2个dll的头文件(可能使syombol包含多个)
我如何解决上述问题,我只希望跨dll和exe一个变量。
我在Windows 7上使用VS 2010专业版。
提前致谢。
您只应在标头中声明全局变量。 它们应该在实现(源)文件中定义 。
在标题中,您应该具有:
// commonHeader.h
extern int commonInt; // global *declaration*
然后在您的一个实现文件中,您应该具有:
// some_file.cpp
int commonInt = 0; // global *definition* (and initialisation)
当然,应尽可能避免使用全局变量-过度使用全局变量是一种“代码异味”,但有时无法避免。
通过在头文件中使用该全局变量定义,您违反了一个定义规则(第3.2节)。 相反,只在带有extern
的头文件中声明它,然后在单个实现文件中具有定义是正确的。
但是,为了使dll能够正常工作,您还必须将其声明为由exe导出,并由__declspec(dllexport)
和__declspec(dllimport)
的dll导入,并使用适当的宏来选择正确的__declspec
具体取决于您是否编译exe或dll。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.