代码之家  ›  专栏  ›  技术社区  ›  mskfisher KeithS

保持DLL静态内存的单独实例

  •  1
  • mskfisher KeithS  · 技术社区  · 15 年前

    我正在尝试集成一个DLL( FooEmulation )进入现有项目。

    DLL假定它只用于模拟一个 Foo 一次使用了很多静态全局变量。
    但是,我希望能够管理成千上万的 实例一次。

    我有原始DLL的源代码,所以我可以将所有静态全局变量转换为将要传入的参数(无论是直接传入还是通过句柄传入),但是DLL是单独维护的,我希望尽可能避免分叉/合并。

    我发现的一种技术是加载动态生成的DLL的多个副本,但对于我所需要的规模来说,这是一种资源量太大的技术。 .

    是否可以保留动态链接库静态内存的多个副本,并在每次使用动态链接库时将其还原?

    2 回复  |  直到 15 年前
        1
  •  1
  •   sharptooth    15 年前

    在同一进程中多次加载DLL时,所有静态数据都是共享的。您必须重新设计库,以便在运行时根据需要动态创建所有这些对象。

        2
  •  0
  •   JimR    15 年前

    我想你是在窗户上,因为没有别的事告诉我。。

    看一看 here, DLLMain有一个参数告诉您

    • 正在附加进程(加载DLL)
    • 进程正在分离(正在卸载DLL)
    • 正在附加线程(加载DLL的每个线程部分)
    • 线程正在分离(卸载DLL的每个线程部分)

    你在德尔曼也要小心。在文档中查找有关在DLLMain中以任何方式阻塞的警告。