SAFEARRAY 構造体 (oaidl.h)
安全な配列を表します。
構文
typedef struct tagSAFEARRAY {
USHORT cDims;
USHORT fFeatures;
ULONG cbElements;
ULONG cLocks;
PVOID pvData;
SAFEARRAYBOUND rgsabound[1];
} SAFEARRAY;
メンバー
cDims
ディメンションの数。
fFeatures
フラグ。
値 | 意味 |
---|---|
|
スタックに割り当てられる配列。 |
|
静的に割り当てられる配列。 |
|
構造体に埋め込まれた配列。 |
|
サイズ変更または再割り当てできない配列。 |
|
レコードを含む配列。 設定すると、配列記述子の負のオフセット 4 にある IRecordInfo インターフェイスへのポインターが存在します。 |
|
IID 識別インターフェイスを持つ配列。 設定すると、セーフ配列記述子の負のオフセット 16 に GUID が設定されます。 フラグは、FADF_DISPATCHまたはFADF_UNKNOWNも設定されている場合にのみ設定されます。 |
|
バリアント型を持つ配列。 バリアント型は SafeArrayGetVartype を使用して取得できます。 |
|
BSTR の配列。 |
|
IUnknown* の配列。 |
|
IDispatch* の配列。 |
|
VARIANT の配列。 |
|
将来使用するために予約されたビット。 |
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 |