SAFEARRAY 结构 (oaidl.h)
表示安全数组。
语法
typedef struct tagSAFEARRAY {
USHORT cDims;
USHORT fFeatures;
ULONG cbElements;
ULONG cLocks;
PVOID pvData;
SAFEARRAYBOUND rgsabound[1];
} SAFEARRAY;
成员
cDims
维度数。
fFeatures
标志。
值 | 含义 |
---|---|
|
在堆栈上分配的数组。 |
|
静态分配的数组。 |
|
嵌入结构中的数组。 |
|
不能调整大小或重新分配的数组。 |
|
包含记录的数组。 设置后,数组描述符中将有一个指针指向 IRecordInfo 接口的负偏移量 4。 |
|
具有 IID 标识接口的数组。 设置后,安全数组描述符中将有一个负偏移量为 16 的 GUID。 仅当同时设置FADF_DISPATCH或FADF_UNKNOWN时,才会设置标志。 |
|
具有变体类型的数组。 可以使用 SafeArrayGetVartype 检索变体类型。 |
|
BSTR 数组。 |
|
IUnknown*的数组。 |
|
IDispatch*的数组。 |
|
VARIANT 数组。 |
|
保留供将来使用的位。 |
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 数据类型的所有公共静态成员都是线程安全的。 不保证实例成员是线程安全的。
例如,假设某个应用程序使用 SafeArrayLock 和 SafeArrayUnlock 函数。 如果从同一 SAFEARRAY 数据类型实例上的不同线程并发调用这些函数,可能会创建不一致的锁计数。 这最终会导致 SafeArrayUnlock 函数返回E_UNEXPECTED。 可以通过提供自己的同步代码来防止这种情况。
要求
要求 | 值 |
---|---|
Header | oaidl.h |