次のようにします。COMオブジェクトは、独自のモジュールをメモリに保持しますか?
1)LoadLibraryを使用してfoo.dllをロードします。
2)GetProcAddressを使用して関数へのポインタを取得します。
3)関数を呼び出して、そのモジュールで実装されているCOMオブジェクトへの参照を与えます。
4)FreeLibraryを呼び出してfoo.dllを解放します。
5)COMオブジェクトのメソッドを呼び出します。
手順5は成功し、AVはないと思いますか?つまり、COMオブジェクト自体がLoadLibraryを呼び出して(再び)Windowsが各モジュールに対して保持する参照カウントをインクリメントして、モジュールの寿命を延ばさないようにしますか?
DLLはDllCanUnloadNow呼び出しに関して未解決の参照をどのように追跡していますか?ありがとう! –
しかし、それは望みです。実装を見てきました。各COMオブジェクトのコンストラクタ/デストラクタがモジュールのグローバル参照カウントをインクリメント/デクリメントし、DllCanUnloadNowはrefカウントをチェックするだけです。 – Michael