GetLasterRorの値とカスタムエラーメッセージの組み合わせ
-
02-10-2019 - |
質問
エラーがある各ケースに対して異なるDWORD値を返す関数があります。だから私は次の定義を持っています:
#define ERR_NO_DB_CONNECTION 0x90000
#define ERR_DB_NOT_OPEN 0x90001
#define ERR_DB_LOCKED 0x90002
#define ERR_DB_CONN_LOST 0x90003
次に、エラーが発生したときにそれらの値を返します。また、同じ返品でgetLasterRorの価値を返す必要があります。
いいえ、後で読めません。
私はそれをさまざまな方法で組み合わせようとしました、例:
return ERR_DB_NOT_OPEN + GetLastError();
次に、err_db_not_openの値を差し引いてエラーを抽出しますが、複数の返品値がある可能性がある関数でこれを使用する必要があるため、それを行うには非常に複雑になります。
これを達成する方法はありますか?つまり、Value + GetLasterRorを組み合わせて後で抽出しますか?コードを大歓迎します。
ありがとう
ジェス。
解決
によると Microsoftのドキュメント, 、システムエラーは15999(0x3E7F)で最大コードをコードします。これは、プレイする上部単語全体を持っていることを意味します。エラーコードを短くして4ヘクスの数字に収まる必要があります。その後、いくつかのWindowsマクロを使用して組み合わせて分割できます。
return MAKELPARAM(GetLastError(), ERR_DB_NOT_OPEN);
int lasterror = LOWORD(result);
int code = HIWORD(result);
他のヒント
私はこの投稿が古いことを知っていますが、念のために...マークの答えを補完します。次のコード領域を使用できます。独自のエラーを定義できます。
エラーコードは32ビット値です(ビット31が最も重要なビットです)。ビット29は、アプリケーション定義のエラーコード用に予約されています。システムエラーコードにはこのビットが設定されていません。アプリケーションのエラーコードを定義している場合は、このビットを設定して、エラーコードがアプリケーションによって定義されていることを示し、エラーコードがシステム定義エラーコードと競合しないことを確認します。
https://msdn.microsoft.com/en-us/library/windows/desktop/ms680627%28v = vs.85%29.aspx
それらを文字列(チャーアレイ)に結合し、発信者から分割することができます。