在C+中使用全局变量+;动态链接库 我有一个C++的DLL,里面有3个类。我在我的“stdafx”头文件中添加了一个静态布尔变量(因为我的所有类都包含它),并尝试使用它。虽然我的所有类都看到了我的变量,但它们似乎都有一个不同的实例。如果我在once类中将变量设置为true,那么我会注意到在另一个类中它是false。有没有办法创建一个只能在DLL中的所有类中使用的变量?

在C+中使用全局变量+;动态链接库 我有一个C++的DLL,里面有3个类。我在我的“stdafx”头文件中添加了一个静态布尔变量(因为我的所有类都包含它),并尝试使用它。虽然我的所有类都看到了我的变量,但它们似乎都有一个不同的实例。如果我在once类中将变量设置为true,那么我会注意到在另一个类中它是false。有没有办法创建一个只能在DLL中的所有类中使用的变量?,c++,windows,dll,C++,Windows,Dll,好吧,您将其标记为static,就是这样。相反,在标题中标记它extern,并在一个TU中定义它 不要修改stdafx;这不是你的。使用您自己的共享标题。好吧,您将其标记为static,所以就是这样。相反,在标题中标记它extern,并在一个TU中定义它 不要修改stdafx;这不是你的。使用您自己的共享标题。您的变量是静态的,您正在stdafx.h中声明它,它包含在项目中的所有源文件中。这意味着每个转换单元将包含变量的自己的副本,这正是您所看到的行为 要解决此问题,请在stdafx.cpp b

好吧,您将其标记为
static
,就是这样。相反,在标题中标记它
extern
,并在一个TU中定义它


不要修改stdafx;这不是你的。使用您自己的共享标题。

好吧,您将其标记为
static
,所以就是这样。相反,在标题中标记它
extern
,并在一个TU中定义它


不要修改stdafx;这不是你的。使用您自己的共享标题。

您的变量是
静态的
,您正在
stdafx.h
中声明它,它包含在项目中的所有源文件中。这意味着每个转换单元将包含变量的自己的副本,这正是您所看到的行为

要解决此问题,请在
stdafx.cpp

bool MyBool = false;
然后在
stdafx.h

extern bool MyBool;

您的变量是
static
,您正在
stdafx.h
中声明它,它包含在项目中的所有源文件中。这意味着每个转换单元将包含变量的自己的副本,这正是您所看到的行为

要解决此问题,请在
stdafx.cpp

bool MyBool = false;
然后在
stdafx.h

extern bool MyBool;

stdafx
您的MSVS预编译头文件不支持吗?你也许不应该修改它吗?我愿意接受任何有助于解决这个问题的想法。这对我来说是最有意义的,所以我选择了它。
stdafx
您的MSV预编译头支持吗?你也许不应该修改它吗?我愿意接受任何有助于解决这个问题的想法。这对我来说最有意义,所以我选择了它。您可以修改
stdafx.h
。文件中自动生成的注释为so//stdafx.h:include file for standard system include files,或经常使用但已更改的特定于项目的include文件infrequently@Praetorian当前位置但这似乎是一个非常糟糕的主意。主要是因为它是由IDE自动生成的;您的
bool
会在某个时候丢失。它是自动生成的,但在创建项目时只生成一次,之后不会被IDE修改。我认为不可能创建您自己的预编译头,它可以与stdafx.h一起使用,因此它可能只是唯一的选项。它永远不会被重新生成。所以你放在那里的东西没有丢失的风险。另一方面,我不会在其中放入任何代码或接口,只放入用于预编译的头文件。我将创建一个供所有类使用的共享头文件。感谢您允许您修改
stdafx.h
。文件中自动生成的注释为so//stdafx.h:include file for standard system include files,或经常使用但已更改的特定于项目的include文件infrequently@Praetorian当前位置但这似乎是一个非常糟糕的主意。主要是因为它是由IDE自动生成的;您的
bool
会在某个时候丢失。它是自动生成的,但在创建项目时只生成一次,之后不会被IDE修改。我认为不可能创建您自己的预编译头,它可以与stdafx.h一起使用,因此它可能只是唯一的选项。它永远不会被重新生成。所以你放在那里的东西没有丢失的风险。另一方面,我不会在其中放入任何代码或接口,只放入用于预编译的头文件。我将创建一个供所有类使用的共享头文件。非常感谢。