c++ - 整个应用程序的变量

标签 c++ windows dll static

我有一个由几个 DLL 组成的 C++ Windows 应用程序。 我想要某种类型的池,我将从中获取对象,但在某种程度上,这个池 将在所有 DLL 中可用。
所以我把它放在一个每个人都可以访问的“通用”dll 中,并在头文件中定义它,如下所示:
静态池 globalPool;

我确实可以访问每个 dll,但是这个池被创建了很多次。
我认为它发生在我的每个 DLL 和每个包含带有定义的头文件的文件中。

我怎样才能正确地做到这一点? 谢谢:)

最佳答案

对象的 static 声明使对象成为编译单元的本地对象。

通过使用 static,您将在包含 header 的每个编译单元中创建一个 globalPool 对象(变量)。

但是做你想做的事情的方法不仅仅是删除 static

而是定义一个函数来提供对您的池的访问(例如,对它的引用),并从池 DLL 中导出该函数或函数集。

或者更好——好得多——忘记这个想法。这通常是个坏主意。但是,如果您真的想这样做,并且看不到任何替代方案,那么上面就是如何做到这一点。

如果你这样做,也许要考虑线程安全。

也许要注意,Windows DLL 的动态加载在编译器对线程局部变量的支持下不能很好地工作。

干杯,

关于c++ - 整个应用程序的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4091209/

相关文章:

c++ - MFC .exe 和 .dll 对同一代码产生不同的结果

c++ - 不能使用 boost::shared_mutex

c++ - 一条规则使用 BOOST_FUSION_ADAPT_STRUCT 时出现精神业力语法问题

c++ - 从 begin() 而不是 cbegin() 获取 const_iterator

C++自制异常处理失败

c++ - 请求关于 dll 编程的好教程

c# - 从 C# 配置 *.scr 文件

c - x86_64-w64-mingw32 中的 setjmp/longjmp

windows - Cygwin:Git stash -> 无法保存当前索引状态

.net - DLL 被标记为 DELETEPENDING