c ++,dll的多个实例,单例

时间:2011-01-07 10:57:10

标签: c++ dll singleton multiple-instances

我有一个DLL,其中定义了一个单例。

我有一个可以加载此DLL的多个实例的应用程序。

DLL每个DLL实例需要一个单例实例,否则会崩溃。

我发现多个DLL实例只有一个单例实例。为什么?我怎样才能解决它(如果可能的话,不将单例重构为其他东西)?

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您提到您的应用中有多个实例,这意味着它们都位于同一个流程中。

与任何其他静态成员一样的单身人士每个应用程序仅限一个,无论它们是否属于从DLL等加载的对象。

答案 1 :(得分:1)

没有重构你的代码就没有办法。 DLL被“加载”到进程空间中。在那里定义的任何静态成员都是进程的静态(加载的DLL没有自己的内存)。

你必须编写一个非标准的“单例”才能获得多个对象。

答案 2 :(得分:1)

如果你没有dll的源代码,那么你必须在不同的进程中加载​​它,每个进程一个“singleton”。这些可能只是处理dll通信部分的主进程的简单子进程。

然后,当然,您必须在主进程和子进程之间提供一些通信方案,这取决于您使用dll的程度。它只是几个带有大量数据的电话吗?或者许多不同的调用因运行而不同?

通常,如果您使用dll进行多次简单调用,则可能更容易重构自己的代码。