SafeArrayCreateEx 函数 (oleauto.h)
从指定的 VARTYPE、维度数和边界创建并返回安全数组描述符。
语法
SAFEARRAY * SafeArrayCreateEx(
[in] VARTYPE vt,
[in] UINT cDims,
[in] SAFEARRAYBOUND *rgsabound,
[in] PVOID pvExtra
);
参数
[in] vt
数组中每个元素的基类型或 VARTYPE。 可以为变体类型设置FADF_RECORD标志VT_RECORD,可以为VT_DISPATCH或VT_UNKNOWN设置FADF_HAVEIID标志,也可以为所有其他 VARTYPE 设置FADF_HAVEVARTYPE。
[in] cDims
数组的维数。
[in] rgsabound
边界向量 (要为数组分配的每个维度) 一个。
[in] pvExtra
用户定义类型的类型信息(如果要创建用户定义的类型的安全数组)。 如果 vt 参数VT_RECORD,则 pvExtra 将是指向描述记录的 IRecordInfo 的指针。 如果 vt 参数VT_DISPATCH或VT_UNKNOWN,则 pvExtra 将包含指向 GUID 的指针,该 GUID 表示要传递给数组的接口类型。
返回值
安全数组描述符;如果无法创建数组,则为 null。
注解
如果 VARTYPE VT_RECORD则调用 SafeArraySetRecordInfo 。 如果 VARTYPE VT_DISPATCH或VT_UNKNOWN则数组的元素必须包含相同类型的接口。 将此数组封送给其他进程的一部分过程包括生成 pvExtra 参数指向的 IID 的代理/存根代码。 若要实际传递异类接口,需要在 pvExtra 中指定IID_IUnknown或IID_IDispatch,并为调用方提供一些其他方法来标识如何查询实际接口。
示例
以下示例说明如何将用户定义类型的安全数组存储到 VT_RECORD 类型的变体中。
SAFEARRAYBOUND * sab;
sab.cElements = 2;
sab.lLbound = 0;
hresult hr;
SAFEARRAY Sa;
Sa = SafeArrayCreateEx(VT_RECORD, 1, &sab, pRecInfo);
if (Sa == NULL)
return E_OUTOFMEMORY;
PVOID pvData;
hr = SafeArrayAccessData(Sa, &pvData);
if (FAILED(hr)) {
SafeArrayDestroy(Sa);
return hr;
}
TEST * pTest;
pTest = (TEST *)pvData;
pTest[0] = a;
pTest[1] = b;
hr = SafeArrayUnaccessData(Sa);
if (FAILED(hr)) {
SafeArrayDestroy(Sa);
return hr;
}
VariantInit(&variant);
V_VT(&variant) = VT_ARRAY|VT_RECORD;
V_ARRAY(&variant) = Sa;
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | oleauto.h |
Library | OleAut32.lib |
DLL | OleAut32.dll |