gpt4 book ai didi

c++ - C++ DLL 中全局变量的范围是什么

转载 作者:可可西里 更新时间:2023-11-01 14:15:23 29 4
gpt4 key购买 nike

假设第 3 方 DLL X 有一个全局变量 G

我编写了两个单独的 DLL(作为应用程序的插件)P1P2,它们都动态加载 X

应用程序的进程加载了我的两个插件 P1P2,所以它们是同时加载的。

这是否意味着我有一个或两个 G 实例?

编辑:

使用场景是 X 是一个 3D 渲染引擎,它具有单例包装系统资源,它的设计根本不是为了在一个进程中期望多个实例 - 你可以运行 2 X 的应用程序,但尝试在同一个 应用程序中两次初始化 X 将会搞砸。这些插件都使用 X 但会作为单独的安装程序进行部署,它们 彼此了解并且不会共享相同的 X。 dll 文件 - 通常每个插件都有自己的目录来存储所需的资源和 DLL。

最佳答案

Win32 API 中公开的 DLL 加载例程确保每个进程只加载一个 DLL 拷贝(see the "Remarks" section here,特别是第三段和安全备注部分之前的最后一段,其中每个进程的引用计数是讨论)。我假设您只是调用 LoadLibrary 或类似的方法,在这种情况下您有一个 G 实例。

似乎认为可以通过在不同位置 ( as noted in this sort-of related question ) 有问题的 DLL 的多个拷贝来规避这个问题,并加载每个拷贝,在这种情况下你可以结束每个 DLL(包括 G)中所有数据的多个拷贝。

关于c++ - C++ DLL 中全局变量的范围是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4908379/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com