我目前正在尝试将DLL(FooEmulation
)集成到现有项目中。
DLL假定它一次只用于模拟一个Foo
,并因此使用大量静态全局变量。
但是,我希望能够一次管理数千个Foo
个实例。
我有原始DLL的源代码,因此我可以将所有静态全局变换为传入的参数(无论是直接还是通过句柄),但DLL是单独维护的,我想如果可能的话,避免分叉/合并。
我发现的一种技术是加载DLL的多个动态生成的副本,但这对于我需要的扩展来说太耗资源了。
我也无法为每个Foo
创建一个流程或线程。
是否可以保留DLL的静态内存的多个副本并在每次使用DLL时恢复它? 我如何找到它?我甚至可以接触它吗?
答案 0 :(得分:1)
当您将DLL多次加载到同一进程中时,所有静态数据都是共享的,句点。您必须重新设计库,以便在运行时根据需要动态创建所有这些对象。
答案 1 :(得分:0)
我假设你在窗户上,因为没有什么可以告诉我的。
看看here, 这是Windows中DLLMain的文档。 DLLMain有一个参数,告诉你是否
如果您捕获进程或线程事件并分配(附加)/释放(分离)静态的新实例,我认为这将解决您的问题。这有点hacky,但它会工作...... 你必须要小心你在DLLMain中所做的事情。在文档中查看有关DLLMain中以任何方式阻止的警告。