2011-12-20 13 views
1

カバレッジ情報を収集するために、VSTS VSinstrツールを使用してプログラムをインストールしています。しかし、インストルメントされたバイナリ、特に私のCOM dllの1つを実行している間、私のプログラムは常に終了ポイントでクラッシュします。COM DLLがアンロードされ、ロックカウンタはまだ0以外です。

私はクラッシュが原因で発生していることを見つけるためにデバッグする:まず、私はcoLoadLibrary(bAutoFree = TRUE)と私のCOM DLLをロード

  • 私のプログラムはいくつかの仕事をします。
  • が終了ポイントに来ました。
  • そして、私のCOM DLLがアンロードされます。 WINDBGは、そのDllMainがdwReason == DLL_PROCESS_DETACHで呼び出されたことを示します。
  • 私のCOM dllのコードが実行され、アクセス違反(コードc0000005)が発生します。私が混乱させる原因は、現時点では_AtlModule.m_nLockCntの値が2に等しいことです!

+1

なぜCoCreateInstanceの代わりにCoLoadLibraryを呼び出していますか?あなたはCoFreeLibraryを呼び出していますか? –

答えて

0

COM API経由でロードされたDLLをアンロードするのが安全かどうかを問い合わせるために、DLLのDllCanUnloadNowが呼び出されます。ここでブレークポイントを設定し、COM DLLがアンロードを承認するかどうかを確認することができます(まだバックグラウンドアクティビティでビジー状態のままです)。

+0

私はそれがロックのカウンタが0に等しくなくても、プロセスが終了する間にdllをアンロードする必要があるからだと思います。 – eeelin

関連する問題