6

私は答えをチェックアウトしました: How can I return both a error string and error code to VB6 from an ATL activex control?

カスタムの負のエラー コードを返すことができます。つまり、重大度ビットが設定され、カスタム エラー メッセージが返されます。しかし、ユーザーが使いやすいように、VB6 が Err.Number の正の # として表示するコードを生成できるようにしたいと考えています。Microsoft の DAO 3.6 DLL ができるので、それができると確信しています。たとえば、テーブルが存在しない場合、Err.Number= 3078 と Err.Description "The Microsoft Jet database..." が返されます。

エラー報告のために ISupportErrorInfo などを実装したことに注意してください。

4

2 に答える 2

5

マークの答えに少し注釈を付けます。彼が FACILITY_CONTROL を使用することについては正しいです。さらに、エラー コードが 512 より大きいことを確認して、VB6 ランタイム エラー コードに干渉しないようにする必要があります。したがって、次のようなものを使用します。

HRESULT MakeVB6Error(UINT errCode) {
    assert(errCode > 0 && errCode < 65536 - 513);
    return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_CONTROL, errCode + 513);
}
于 2013-05-09T01:09:29.933 に答える