いくつかのCOM オブジェクトを含むDLLがあります。場合によっては、このオブジェクトがクラッシュし、多数の 16 進情報とともに Windows イベント ログにエラー イベントが登録されます。このクラッシュが発生する理由はわかりません。
では、これらの COM オブジェクトの例外を追跡するにはどうすればよいでしょうか?
最初のステップは、Failコードの16進値(EG E_FAIL 0x80004005)を検索することです。エラーコードが何を意味するのかを理解するために、その値をGoogleに投稿することは本当に幸運でした。
次に、試行錯誤を繰り返して、失敗しているコード内の場所と、失敗の根本的な原因を特定しようとします。
A good way to look up error (hresult) codes is HResult Plus or welt.exe (Windows Error Lookup Tool).
I use logging internally in the COM-classes to see what is going on. Also, once the COM-class is loaded by the executable, you can attach the VS debugger to it and debug the COM code with breakpoints, watches, and all that fun stuff.
COM objects don't throw exceptions. They return HRESULTs, most of which indicate a failure. So if you're looking for the equivalent of an exception stack trace, you're out of luck. You're going to have to walk through the code by hand and figure out what's going on.
エラーコードの意味をすばやく確認したい場合は、Visual Studioにパッケージ化されている「エラールックアップ」ツールを使用できます(詳細はこちら)。16進値を入力すると、そのエラーコードを説明する文字列が表示されます。
もちろん、それを知った後でも、なぜそれが起こっているのかを理解する必要があります。