1. ホーム
  2. error-handling

[解決済み] VB6でVarTypeが返すvbErrorとは何ですか?

2022-02-17 23:52:26

質問

この件に関してウェブ上で検索しているのですが、いずれも ErrObject クラス、または定数 vbError が返す VarType 関数を使用します。 その型が実際にどのようなものか知りたい 例えば integer は次のようなものです。 4 , a string は次のようなものです。 "hello world" など。

少し背景を説明しますと こちら に関する MSDN の公式ページへのリンクです。 VarType この定数には、この定数が返すすべての定数と、それらが表すものが示されています。 とは Error value ?

解決方法は?

C/C++のCOMに慣れている人なら、その観点で VarType() の値を抽出する単純な関数です。 vt メンバーから Variant パラメータとして渡される。パラメータとして渡された vt メンバは、多くの場所で文書化されています。 ここで .

COMシステムヘッダ(例:Windows SDKの一部として配布されているWTypes.h)の内部を確認すると VbError の値は、C/C++のenum値である10に確かに対応します。 VT_ERROR .

enum VARENUM
    {  VT_EMPTY   = 0,
       ...
       VT_ERROR  = 10,
       ...
    } ;

上記の MSDN のリンク先には vt と同じです。 VT_ERROR を次のようにします。

SCODEが指定されました。エラーの種類は スコード . 一般に、エラー値に対する操作は、適宜、例外を発生させるか、エラーを戻り値に伝搬させる必要があります。

つまり、基本的にはこういうことです。

A Variant 明らかに多くのタイプの値の保存をサポートしており、その中に "エラーコード" を保存する曖昧な可能性があります。より正確には、これらのコードは正式には scode これは、成功や失敗など、さまざまな状態を示すことができるからです。多くの人は、これらのコードを HRESULT s.

これらのコードは、以下のコードと同じ種類のものです。 Err.Number をVB6で作成しました。ですから Variant を使えば、単なる数字とエラーコードを区別することができます。

実際には、Variantにエラーコードを入れるプログラムやCOMコンポーネントは(あったとしても)ほとんどないでしょう。ほとんどの場合、エラーを伝えるためにCOM例外を発行するだけです(このメカニズムは、VB6で Err オブジェクトを使用します)。COM Exceptionメカニズム以外でエラーコードを返すコンポーネントでも、型付き変数で返すことが多いでしょう(例えば Long 's).

したがって、この可能性のある戻り値が存在するのは、完全性を確保するためです。実際の生活ではほとんど目にすることはないでしょう。

(編集: "Error"バリアントを作成できないことを削除しました。それについては@Joeが私の間違いを証明してくれました。を使うことができます。 CVErr() を作成する)