我有一个DLL,其中定义了一个单例。
我有一个可以加载此DLL的多个实例的应用程序。
DLL每个DLL实例需要一个单例实例,否则会崩溃。
我发现多个DLL实例只有一个单例实例。为什么?我怎样才能解决它(如果可能的话,不将单例重构为其他东西)?
感谢您的帮助。
答案 0 :(得分:1)
您提到您的应用中有多个实例,这意味着它们都位于同一个流程中。
与任何其他静态成员一样的单身人士每个应用程序仅限一个,无论它们是否属于从DLL等加载的对象。
答案 1 :(得分:1)
没有重构你的代码就没有办法。 DLL被“加载”到进程空间中。在那里定义的任何静态成员都是进程的静态(加载的DLL没有自己的内存)。
你必须编写一个非标准的“单例”才能获得多个对象。
答案 2 :(得分:1)
如果你没有dll的源代码,那么你必须在不同的进程中加载它,每个进程一个“singleton”。这些可能只是处理dll通信部分的主进程的简单子进程。
然后,当然,您必须在主进程和子进程之间提供一些通信方案,这取决于您使用dll的程度。它只是几个带有大量数据的电话吗?或者许多不同的调用因运行而不同?
通常,如果您使用dll进行多次简单调用,则可能更容易重构自己的代码。