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

How to use global variables across projects in a solution?

本文关键字:项目 全局变量 解决方案      更新时间:2023-10-16

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

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

文件1:

int GlobalVariable;
int main(int argc, char *argv[]) {
    // blablabla
}
文件2:

extern int GlobalVariable;
int somefunc(void) {
    // blablabla
}
文件3:

extern int GlobalVariable;
// blablabla

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

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

另一种方法很简单:创建一个dll来保存您的共享变量,并将它们包装在一个pragma中。例如从这个链接:

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

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

翻译单元和项目是有区别的(特别是在Visual Studio中)。

在C和c++中,通过在声明前使用static关键字,可以使全局变量只能从声明该变量的文件中访问。不使用static关键字的全局变量可以从编译到程序中的任何C或c++文件中访问。

但坦率地说,你的问题不清楚。当你说Global时,它可以有很多角度,正如维基百科在关于全局变量的文章中所说:

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

但是,你可以通过这些链接看看你是否可以解决你的具体问题:

跨项目的全局变量/函数

c++静态库中的共享全局变量

如何在c++中实现进程全局变量