如何在解决方案中跨项目使用全局变量?

时间:2011-04-20 09:45:04

标签: c++ visual-studio-2008

我有一个C ++解决方案,其中有一个全局变量,我想在解决方案文件中的项目中访问它。我知道这不推荐,但最好的方法是什么?

3 个答案:

答案 0 :(得分:2)

解决方案中的所有项目 - 即您正在构建多个dll,在解决方案中分组到一起?

如果是这种情况那么你就会遇到一个问题,即一个dll中的全局不能被另一个dll轻易读取。您需要编写全局到共享内存并从那里读取所有dll。

另一种方法很简单:创建一个dll jsut来保存共享变量并将它们包装在一个pragma中。例如来自this link

#pragma data_seg (".myseg")
   int i = 0; 
   char a[32]n = "hello world";
#pragma data_seg()

然后你的每个不同的dll都可以与'data dll'链接,数据dll将包含一个变量的实例,无论它加载多少次或在哪个进程中。性能计数器使用此技术在生成数据的进程和读取并显示数据的perfmon.exe之间快速传递数据计数器。

答案 1 :(得分:1)

在最初具有全局变量的文件中定义变量一次,并在使用它的每个文件中声明变量extern

文件1:

int GlobalVariable;

int main(int argc, char *argv[]) {
    // blablabla
}

文件2:

extern int GlobalVariable;

int somefunc(void) {
    // blablabla
}

文件3:

extern int GlobalVariable;

// blablabla

答案 2 :(得分:1)

翻译单元和项目之间存在差异(特别是在Visual Studio中)。

在C和C ++中,您可以通过在声明前面使用static关键字来创建一个全局变量,只能从声明它的文件中访问它。可以从编译到程序中的任何C或C ++文件访问不使用static关键字的Globals。

但坦率地说,你的问题并不清楚。当你说Global时,可以有很多观点,正如维基百科在Global Variables的文章中所说:

C语言不使用术语全局,但在单个文件中包含的小程序中,通过在所有函数之外声明变量可以获得相同的效果(见下文)。但是,这样的变量应该被称为外部变量,而不是全局变量,因为它的范围仅限于单个文件。

但是,您可以浏览这些链接,看看您是否可以解决您的具体问题:

Global variables/functions across different projects

Shared global variable in C++ static library

How to implement process-global variable in C++