2017-11-20 5 views
0

のPInvokeを使用してネイティブ関数を呼び出している間、私が得る三つの異なるリターン/エラー/ステータスコードの種類があります。最初のものは、Marshal.GetLastWin32Error静的メソッドを呼び出すことによって得られる通常のエラーコードです。もう1つは、COMヘルパー関数を呼び出すときに取得するHRESULTです。そして3番目はNTSTATUSです.ntdll.dllライブラリからネイティブAPIを呼び出しています。私は16進数値として返り値/エラー/ステータスコードを記録するログ機能を持っています。そして、エラーがログに記録されたら、実際のエラーの内容を調べるためにgoogleを使用する必要があります。ピンポーク中にロギングエラーが発生しましたか?

だから私が代わりに番号のリターン/エラー/ステータス文字列の説明をログに記録する(好ましくは英語で)文字列にこれらのリターン/エラー/ステータスコードを変換するための良い方法があればお願いしたいのですが? LastError/HRESULT/NTSTATUSコード間で変換する方法があるので、エラーメッセージのセマンティクスは同じになるでしょうか?

+1

は、これらのエラーを処理するわけではありません。例外をスローすることを検討してください。常にキャッチハンドラにログインできます。 Win32ExceptionによってWin32例外が生成され、GetLastWin32Error()を呼び出す必要はありません。 COM例外はMarshal.ThrowExceptionForHR()で生成されます。彼らは両方ともエラーのテキスト表現を取得する作業を行います。 NTSTATUSコードは、特定のモジュールによって生成されることが多いため、扱いにくいので、FormatMessage()をピンボケしなければなりません。 –

+0

魔法の弾丸IMHOはありません。 SO上、ここで説明したようなのFormatMessageは、多くの場合に便利です。https://stackoverflow.com/questions/7008047/is-there-a-way-to-get-the-string-representation-of-hresult-value-using-win-そうでなければ私はランダムなグーグルよりもはるかに優れているこのオンラインの無料ツール(20年以上もあなたと同じ問題を抱えている)をお勧めします:http://www.magnumdb.com名前または名前でエラーコードを取得しますコードなどで、それを定義する.hファイルなど –

答えて

0

あなたは、この目的のためにerrorlook toolsを使用することができます。このリンクは古いもので、古いVC++でこれを学んだので、現代のツールを見つけるための出発点として使うことができます。私はあなたが元のエラー・コードを維持することをお勧めロギング用として

。意味のあるエラーメッセージは読みやすくなりますが、元のエラーコードは検索エンジンにとって正確なキーワードです。例外はかなり問題がある、今まで素敵な何も起こらなかったし、あなただけのそれらをオフに肩をすくめることができオッズは非常に低くあるべきよう

関連する問題