短縮版
varType = SafeArrayGetVarType(mySafeArray);
ロングバージョン
SAFEARRAY
には、配列の内容を説明するのに役立つ機能メンバーがあります
- fFeatures:セクション2.2.9で指定されたビット フラグの組み合わせに設定する必要があります。
そして、あなたは相談します:
2.2.9 ADVFEATUREFLAGS 高度な機能フラグ (アーカイブ)
次の値は、SAFEARRAY (セクション 2.2.30.10) データ型のフィールド fFeatures で使用されます。
typedef enum tagADVFEATUREFLAGS
{
FADF_AUTO = 0x0001,
FADF_STATIC = 0x0002,
FADF_EMBEDDED = 0x0004,
FADF_FIXEDSIZE = 0x0010,
FADF_RECORD = 0x0020,
FADF_HAVEIID = 0x0040,
FADF_HAVEVARTYPE = 0x0080,
FADF_BSTR = 0x0100,
FADF_UNKNOWN = 0x0200,
FADF_DISPATCH = 0x0400,
FADF_VARIANT = 0x0800
} ADVFEATUREFLAGS;
- FADF_RECORD: SAFEARRAY には UDT の要素が含まれている必要があります (セクション 2.2.28.1 を参照)。
- FADF_HAVEIID: SAFEARRAY には MInterfacePointers 要素が含まれている必要があります。
- FADF_HAVEVARTYPE: このビット フラグが設定されている場合、SAFEARRAY の cLocks フィールドの上位ワードには、配列の要素の型を記述する VARIANT 型定数が含まれている必要があります (セクション 2.2.7 および 2.2.30.10 を参照)。
- FADF_BSTR: SAFEARRAY には BSTR 要素の配列が含まれている必要があります (セクション 2.2.23 を参照)。
- FADF_UNKNOWN: SAFEARRAY には、IUnknown へのポインターの配列が含まれている必要があります。
- FADF_DISPATCH: SAFEARRAY には、IDispatch へのポインターの配列が含まれている必要があります (セクション 3.1.4 を参照)。
- FADF_VARIANT: SAFEARRAY には、VARIANT インスタンスの配列が含まれている必要があります。
そのため、FADF に応じて、対応するバリアント タイプを考え出すことができます。
機能フラグ |
対応するバリアント タイプ |
FADF_UNKNOWN |
VT_UNKNOWN |
FADF_DISPATCH |
VT_DISPATCH |
FADF_VARIANT |
VT_VARIANT |
FADF_BSTR |
VT_BSTR |
FADF_HAVEVARTYPE |
SafeArrayGetVarType(mySafeArray) |
上記の作業 (FADF_BSTR を VT_BSTR に一致させるなど) はすべて、ヘルパー関数SafeArrayGetVarType ( archive )によってまとめられていることがわかります。
FADF_HAVEVARTYPE
が設定されている場合、 SafeArrayGetVartypeは配列記述子に格納されている VARTYPE を返します。
- が設定されている場合
FADF_RECORD
は、 を返しますVT_RECORD
。
- が設定されている場合
FADF_DISPATCH
は、戻りますVT_DISPATCH
。
- が設定されている場合
FADF_UNKNOWN
は、 を返しますVT_UNKNOWN
。
SafeArrayGetVartypeは、 IUnknownVT_UNKNOWN
に基づく SAFEARRAY 型を返すことができない場合があります。呼び出し元は、SAFEARRAY 型のfFeaturesフィールドにフラグが設定されているかどうかをさらに確認する必要があります。FADF_UNKNOWN