SAFEARRAY 構造体 (oaidl.h)

安全な配列を表します。

構文

typedef struct tagSAFEARRAY {
  USHORT         cDims;
  USHORT         fFeatures;
  ULONG          cbElements;
  ULONG          cLocks;
  PVOID          pvData;
  SAFEARRAYBOUND rgsabound[1];
} SAFEARRAY;

メンバー

cDims

ディメンションの数。

fFeatures

フラグ。

意味
FADF_AUTO
0x0001
スタックに割り当てられる配列。
FADF_STATIC
0x0002
静的に割り当てられる配列。
FADF_EMBEDDED
0x0004
構造体に埋め込まれた配列。
FADF_FIXEDSIZE
0x0010
サイズ変更または再割り当てできない配列。
FADF_RECORD
0x0020
レコードを含む配列。 設定すると、配列記述子の負のオフセット 4 にある IRecordInfo インターフェイスへのポインターが存在します。
FADF_HAVEIID
0x0040
IID 識別インターフェイスを持つ配列。 設定すると、セーフ配列記述子の負のオフセット 16 に GUID が設定されます。 フラグは、FADF_DISPATCHまたはFADF_UNKNOWNも設定されている場合にのみ設定されます。
FADF_HAVEVARTYPE
0x0080
バリアント型を持つ配列。 バリアント型は SafeArrayGetVartype を使用して取得できます。
FADF_BSTR
0x0100
BSTR の配列。
FADF_UNKNOWN
0x0200
IUnknown* の配列。
FADF_DISPATCH
0x0400
IDispatch* の配列。
FADF_VARIANT
0x0800
VARIANT の配列。
FADF_RESERVED
0xF008
将来使用するために予約されたビット。

cbElements

配列要素のサイズ。

cLocks

対応するロック解除なしで配列がロックされた回数。

pvData

データ。

rgsabound[1]

各ディメンションに対して 1 つのバインド。

注釈

配列 rgsabound は、rgsabound[0] の左端の次元と、 の右端の次元と共に rgsabound[cDims - 1]格納されます。 C のような構文で [2][5] として配列が指定されている場合、 rgsabound ベクターには 2 つの要素が含まれます。 要素 0 の lLbound は 0 で、 cElements は 2 です。 要素 1 の lLbound は 0 で、 cElements は 5 です。

fFeatures フラグは、配列の解放方法に影響を与える可能性のある配列の属性を記述します。 fFeatures フィールドは、SAFEARRAY に格納されるデータの種類と配列の割り当て方法を示します。 これにより、含まれているバリアントを参照せずに配列を解放できます。

スレッド セーフ

SAFEARRAY データ型のすべてのパブリック静的メンバーはスレッド セーフです。 インスタンス メンバーがスレッド セーフであるとは限りません。

たとえば、 SafeArrayLock 関数と SafeArrayUnlock 関数を使用 する アプリケーションを考えてみましょう。 これらの関数が同じ SAFEARRAY データ型インスタンス上の異なるスレッドから同時に呼び出されると、一貫性のないロックカウントが作成される可能性があります。 これにより、 SafeArrayUnlock 関数は最終的にE_UNEXPECTEDを返します。 これを防ぐには、独自の同期コードを指定します。

要件

要件
Header oaidl.h