1

これは製品コード用ではなく、単体テスト用です。

DLL_PROCESS_DETACH イベントでリソースを解放する従来の DLL があります。静的変数のデストラクタが DLL によってマップされていないリソース (ダングリング参照) にアクセスしようとしたため、実行可能ファイルの静的破棄フェーズでクラッシュ シナリオが発生しました。

修正したことを証明できるように、このクラッシュ シナリオを単体テストで再現したいと思います。

4

1 に答える 1

2

GetModuleHandle(LPCTSTR lpModuleName)を使用してモジュールへのハンドルを取得し、それをに渡すことができる場合がありますFreeLibrary()

GetModuleHandle()州の文書:

このGetModuleHandle関数は、参照カウントをインクリメントせずに、マップされたモジュールへのハンドルを返します。ただし、このハンドルがFreeLibrary関数に渡されると、マップされたモジュールの参照カウントがデクリメントされます。GetModuleHandleしたがって、関数に返されたハンドルを渡さないでくださいFreeLibrary。これを行うと、DLLモジュールが時期尚早にマップ解除される可能性があります。

そうしないようにという警告にもかかわらず、それはまさにあなたがやろうとしていることのように聞こえます。これは、シナリオでテストして、希望どおりに機能することを確認するのがかなり簡単なはずです。

于 2012-08-06T22:57:33.740 に答える