如何在解决方案中跨项目使用全局变量
How to use global variables across projects in a solution?
我有一个c++解决方案,其中有一个全局变量,我想在解决方案文件中跨项目访问。我知道这是不推荐的,但是最好的方法是什么呢?
在最初拥有全局变量的文件中定义一次变量,并在使用它的每个文件中声明变量extern
。
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++中实现进程全局变量
相关文章:
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 当vector是tje全局变量时,c++中vector的内存管理
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 内联函数中具有内部链接的全局变量
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 全局变量 多读取器 一个写入器多线程安全?
- 如果全局变量默认是外部变量,为什么要添加"extern"关键字?
- 不同作用域中的静态变量和全局变量
- C++ 在编译时具有函数计算全局变量
- 修改程序的入口点时未调用全局变量的构造函数
- 使用 std::ios_base::Init 正确初始化全局变量
- 为什么我的全局变量似乎没有变化?
- C ++程序如何返回我的数组或写入全局变量
- 在两个项目中使用全局变量
- 我应该如何在我的C++项目中声明全局变量
- C++/C在Visual Studio中的两个项目之间共享全局变量
- 在可执行项目中执行库的全局变量生成部分
- 如何创建一个具有全局变量的 lib 文件,这些全局变量应该将其信息共享给另一个项目
- 如果需要从配置文件初始化全局变量,如何在项目中共享全局变量
- 如何在解决方案中跨项目使用全局变量