3

我有一个定义了单例的 DLL。

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

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

我观察到多个 DLL 实例只有一个单例实例。为什么?我该如何解决它(如果可能,不将单例重构为其他东西)?

谢谢你的帮助。

4

3 回答 3

1

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

您必须编写一个非标准的“单例”来获取多个对象。

于 2011-01-07T11:22:02.647 回答
1

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

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

于 2011-01-07T11:05:14.233 回答
1

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

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

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

于 2011-01-07T12:07:47.547 回答