2012-02-10 12 views

答えて

3

REGDB_E_CLASSNOTREGの定義済みの定数はありますか?コードで使用できますか?

不機嫌な答えは:

はい、それは次のようになります。

public const int REGDB_E_CLASSNOTREG = unchecked((int)0x80040154); 

本当の答え:

いいえ、.NET Frameworkの公共何もないことその価値をあなたのために定義します。最初にCOMExceptionがスローされているという事実は、特定のエラーコード(実際にはHRESULTの値が基になるCOM関数によって返されます)が.NET Frameworkが認識し、より具体的かつ有益な例外タイプ。 documentationが示しているように、COMExceptionは実際にはErrorCodeプロパティを含む多目的例外です。したがって、呼び出されたユーザーが返したHRESULTを確認して、一般的な例外の根本的な原因を特定できます。

これらのHRESULTの値は、実際にはWindows SDKに含まれているWindowsヘッダーファイルで定義されています。 #includeこれらのヘッダーはCまたはC++でWindowsアプリケーションを作成するときに.NETの管理された世界では、適切な定義をソースファイルにコピーすることで自分で定義する必要があります。

逆互換性がどれほど重要であり、いくつのアプリケーションが壊れるかを考えれば、この値が少なくともWindowsでは変わることはほとんどありません。このような値は、合理的には定数と見なすことができます。しかし、私はまだそれらを「マジックナンバー」としてハードコードしません。上のようにpublic定数を定義すると、に変更されました。コードを変更してから再コンパイルするだけで済みます。

Monoに関しては、この値が必要な場合は、最終的には上記と同じことが行われます。ランタイムバージョンのソースファイルのどこかには、internal const int ...のような宣言がたくさんあります。

+0

「0x80040154」**ではありません。「0x80040514」です。 –

関連する問題