これは製品コード用ではなく、単体テスト用です。
DLL_PROCESS_DETACH イベントでリソースを解放する従来の DLL があります。静的変数のデストラクタが DLL によってマップされていないリソース (ダングリング参照) にアクセスしようとしたため、実行可能ファイルの静的破棄フェーズでクラッシュ シナリオが発生しました。
修正したことを証明できるように、このクラッシュ シナリオを単体テストで再現したいと思います。
これは製品コード用ではなく、単体テスト用です。
DLL_PROCESS_DETACH イベントでリソースを解放する従来の DLL があります。静的変数のデストラクタが DLL によってマップされていないリソース (ダングリング参照) にアクセスしようとしたため、実行可能ファイルの静的破棄フェーズでクラッシュ シナリオが発生しました。
修正したことを証明できるように、このクラッシュ シナリオを単体テストで再現したいと思います。
GetModuleHandle(LPCTSTR lpModuleName)を使用してモジュールへのハンドルを取得し、それをに渡すことができる場合がありますFreeLibrary()。
GetModuleHandle()州の文書:
この
GetModuleHandle関数は、参照カウントをインクリメントせずに、マップされたモジュールへのハンドルを返します。ただし、このハンドルがFreeLibrary関数に渡されると、マップされたモジュールの参照カウントがデクリメントされます。GetModuleHandleしたがって、関数に返されたハンドルを渡さないでくださいFreeLibrary。これを行うと、DLLモジュールが時期尚早にマップ解除される可能性があります。
そうしないようにという警告にもかかわらず、それはまさにあなたがやろうとしていることのように聞こえます。これは、シナリオでテストして、希望どおりに機能することを確認するのがかなり簡単なはずです。