SAFEARRAY 简介
SAFEARRAY 是 Automation 的数组数据类型。它被称为“安全的”的数组,因为它不仅包含有通常意义上的数组元素;而且,还包含有其它信息,如:数组是几维,每一维的边界,等等信息。
SAFEARRAY 实际上是一个 structure ,在 Oaidl.h 定义如下:
typedef struct tagSAFEARRAY
{
USHORT cDims; // number of dimensions
USHORT fFeatures; // 标记数组存储的是那种数据。怎么分配的。
ULONG cbElements;// 每个元素的大小(字节)
ULONG cLocks;
PVOID pvData;// 指向数据。
SAFEARRAYBOUND rgsabound[ 1 ];// 内嵌数组,为每一维保存一个元素,此元素定义了此维的范
// 围 ( 元素数量 ) 和此维下限索引。
} SAFEARRAY;
SAFEARRAYBOUND 也是一个 structure ,定义如下:
typedef struct tagSAFEARRAYBOUND
{
ULONG cElements;
LONG lLbound;
} SAFEARRAYBOUND;
The Windows API 有大量的函数用来创建和使用 SAFEARRAY ,名字为 SafeArray 。
MFC 利用类 COleSafeArray 来处理 SAFEARRAY 。
例子:
创建一个 COleSafeArray 对象,此对象为一个一维 SAFEARRAY ,包含整数从 1 至 10 。
COleSafeArray sa;
LONG lValues[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
sa.CreateOneDim (VT_I4, 10, lValues);
SAFEARRAY 存储在 VARIANT 数据结构中。
COleSafeArray 的 LPVARIANT 和 LPCVARIANT 操作符能获得 VARIANT 数据结构的地址。
如: VARIANT* pVariant = (LPVARIANT) sa;