Memory 保留单独的DLL实例';静态存储器
我目前正在尝试将DLL(Memory 保留单独的DLL实例';静态存储器,memory,dll,static,global-variables,Memory,Dll,Static,Global Variables,我目前正在尝试将DLL(FooEmulation)集成到现有项目中 DLL假定它一次只用于模拟一个Foo,因此使用了大量静态全局变量。 但是,我希望能够同时管理数千个Foo实例 我有原始DLL的源代码,因此我可以将所有静态全局变量转换为传入的参数(无论是直接传入还是通过句柄传入),但是DLL是单独维护的,如果可能的话,我希望避免分叉/合并 我发现的一种技术是加载动态生成的DLL的多个副本,但这对于我所需要的规模来说资源太多了。 我也负担不起为每个Foo创建进程或线程 是否可以保留DLL静态内存的
FooEmulation
)集成到现有项目中
DLL假定它一次只用于模拟一个Foo
,因此使用了大量静态全局变量。但是,我希望能够同时管理数千个
Foo
实例
我有原始DLL的源代码,因此我可以将所有静态全局变量转换为传入的参数(无论是直接传入还是通过句柄传入),但是DLL是单独维护的,如果可能的话,我希望避免分叉/合并
我发现的一种技术是加载动态生成的DLL的多个副本,但这对于我所需要的规模来说资源太多了。
我也负担不起为每个Foo
创建进程或线程
是否可以保留DLL静态内存的多个副本,并在每次使用DLL时将其还原?我如何找到它?我甚至可以触摸它吗?当您将DLL多次加载到同一进程中时,所有静态数据都会共享,句号。您必须重新设计库,以便在运行时根据需要动态创建所有这些对象。当您将DLL多次加载到同一进程中时,所有静态数据都将共享。您必须重新设计库,以便在运行时根据需要动态创建所有这些对象。我假设您在windows上,因为没有任何其他信息告诉我 看看Windows中DLLMain的文档。 DLLMain有一个参数告诉您
- 正在附加进程(加载DLL)
- 进程正在分离(卸载DLL)
- 正在附加线程(加载DLL的每个线程部分)
- 线程正在分离(卸载DLL的每个线程部分)
你在德莱曼也要小心。在文档中查找关于在DLLMain中以任何方式阻止的警告。我假设您在windows上,因为没有任何其他信息告诉我 看看Windows中DLLMain的文档。 DLLMain有一个参数告诉您
- 正在附加进程(加载DLL)
- 进程正在分离(卸载DLL)
- 正在附加线程(加载DLL的每个线程部分)
- 线程正在分离(卸载DLL的每个线程部分)
你在德莱曼也要小心。在文档中查找关于在DLLMain中以任何方式阻塞的警告。我只想加载DLL一次-我真正想要的是在我代表
FooB
调用DLL函数时交换底层静态数据,而不是FooA
@mskfisher:我明白了。为此,您必须重新设计库的内部结构。我只想加载DLL一次-我真正想要的是,当我代表FooB
vs.FooA
@mskfisher调用DLL函数时,交换掉底层的静态数据。我明白了。为此,您必须重新设计库的内部结构。