我最近遇到了一个COM
使用单例类工厂的对象的问题,该对象的成员是指向在与单例对象不同的 DLL 中实现的其他 COM 对象的指针。
这些其他 COM 对象是由单例对象创建的,这是对它们的唯一引用。
由于单例对象在其模块被卸载之前永远不会被销毁,似乎正在发生的事情是有时在那个点上,实现其他 COM 对象(单例的成员)的 DLL 已经被卸载,在这种情况下会有当单例在其析构函数中释放对这些对象的引用时发生崩溃。
实现其他 COM 对象的 DLL 知道存在对对象的引用并S_FALSE
从其DllCanUnloadNow
方法返回。
但是,这似乎并不能阻止 DLL 总是被卸载。
是否有任何安全的方法可以在单例 COM 对象中保留来自另一个 dll 的 COM 对象的成员指针?