Visual C++ で実装された私の COM サーバーは、他の大量の C++ コードを使用しています。他の C++ コードは、コードをラップして、構造化例外をカスタム C++ 例外に変換することが__try
あり__except
ます。この部分は私には変えられません。
私の COM サーバーのメソッドは、これらの例外が COM 境界を介して伝播することを許可しないため、それらをキャッチしてHRESULT
s に変換する必要があります。これらのカスタム C++ 例外には、変換中に取得された元のエラー コードが含まれていますEXCEPTION_ACCESS_VIOLATION
。問題は、クライアントが何が起こったのかについて可能な限り多くの情報を取得できるように、適切なHRESULT
値をどのように作成するかです (そして、アクセス違反を見た後にサーバー (および inproc の場合はそれ自体) を再起動することを決定する可能性があります)。
EXCEPTION_ACCESS_VIOLATION
で定義されているとします。WinBase.h
#define EXCEPTION_ACCESS_VIOLATION STATUS_ACCESS_VIOLATION
後者はで定義されていますWinNT.h
#define STATUS_ACCESS_VIOLATION ((DWORD)0xC0000005L)
そもそもWin32 エラーであると仮定して、HRESULT_FROM_WIN32()
そのコードを変換するために使用できます。HRESULT
HRESULT_FROM_WIN32()
ここで翻訳を行うべきですか、それとも他の方法を使用して翻訳を行うべきですか?