私は最近、シングルトン クラス ファクトリCOM
を使用し、シングルトン オブジェクトとは異なる DLL に実装された他の COM オブジェクトへのポインターであるメンバーを持つオブジェクトで問題に遭遇しました。
これらの他の COM オブジェクトはシングルトン オブジェクトによって作成され、それがそれらへの唯一の参照でした。
シングルトン オブジェクトは、そのモジュールがアンロードされるまで決して破棄されないため、その時点で、他の COM オブジェクト (シングルトンのメンバー) が実装されている DLL が既にアンロードされている場合があり、その場合は、シングルトンがデストラクタでこれらのオブジェクトへの参照を解放したときにクラッシュしました。
他の COM オブジェクトを実装する DLL は、オブジェクトへの参照が保持されていることを認識し、S_FALSE
そのDllCanUnloadNow
メソッドから戻ります。
ただし、これは DLL が常にアンロードされるのを妨げているようには見えません。
シングルトン COM オブジェクト内の別の dll から COM オブジェクトへのメンバ ポインタを保持する安全な方法はありますか?