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
VULT 的陣列。
FADF_RESERVED
0xF008
保留供日後使用的位。

cbElements

數位專案的大小。

cLocks

陣列在未對應解除鎖定的情況下鎖定的次數。

pvData

資料。

rgsabound[1]

每個維度都有一個系結。

備註

陣列 rgsabound 會以 rgsabound [0] 中最左邊的維度和 中 rgsabound[cDims - 1]最右邊的維度儲存。 如果在類似 C 的語法中指定數位做為 [2][5],則 rgsabound 向量中有兩個元素。 元素 0 的 lLbound 為 0, 而 cElements 為 2。 元素 1 的 lLbound 為 0, 而 cElements 為 5。

fFeatures 旗標描述可能會影響數位釋放方式的數位屬性。 fFeatures 欄位描述儲存在 SAFEARRAY 中的數據類型,以及如何配置數位。 這允許釋放陣列,而不參考其包含的變體。

執行緒安全性

SAFEARRAY 數據類型的所有公用靜態成員都是安全線程。 實例成員不保證是安全線程。

例如,請考慮使用 SafeArrayLockSafeArrayUnlock 函式的應用程式。 如果從相同 SAFEARRAY 數據類型實例上的不同線程同時呼叫這些函式,可能會建立不一致的鎖定計數。 這最終會導致 SafeArrayUnlock 函式傳回E_UNEXPECTED。 您可以藉由提供自己的同步程式代碼來防止這種情況。

規格需求

需求
標頭 oaidl.h