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