3

.NET コードで、COM コンポーネントによって返される HRESULT の標準の記号名を使用できるようにしたいと考えています。たとえば、次のようなコードを記述できるようになりたいと考えています。

try {
    someComObject->DoSomething();
}
catch (COMException ex) {
    if (ex.ErrorCode == E_FAIL) {
        HandleFail();
    }
    else if (ex.ErrorCode == E_OUTOFMEMORY) {
        HandleOutOfMemory();
    }
    else {
        HandleComError(ex.ErrorCode);
    }
}

しかし、E_FAIL、E_OUTOFMEMORY、E_UNEXPECTED などのシンボルが定義されている .NET フレームワークの場所を見つけることができません。ネイティブ Win32 アプリの場合、<winerror.h> から定義を取得できます ( http://msdn.microsoft.com/en-us/library/aa378137(VS.85).aspxを参照)。

次のように、必要な場所で自分で定義できます。

int E_FAIL = unchecked((int)0x80004005L);

しかし、可能であれば、標準的な場所から定義を取得したいと思います。私はそれらがどこかで定義されているのを見つけたと思いますが、私の MSDN 検索は今それらを見つけていません。

.NET ライブラリのどこかにそのような定義のセットはありますか?

4

1 に答える 1

2

フレームワーク自体には存在しないと思います。たぶんあなたはpinvoke.netでこのリストを見つけました。値の変更について心配する必要はありません。Cヘッダーファイルの値はアプリケーションにコンパイルされるため、存在するすべてのCOMアプリケーションを壊さずに変更することはできません。

COMExceptionまた、のを受け取ることはありませんE_OUTOFMEMORY。これにより、が生成されますOutOfMemoryExcetpion。ランタイムはHRESULTS、それが知っていることを意味のある例外にマップします。MSDNのマッピング定義を参照してください。

于 2010-08-29T01:44:49.063 に答える