SafeArrayGetElement 函数 (oleauto.h)
检索数组的单个元素。
语法
HRESULT SafeArrayGetElement(
[in] SAFEARRAY *psa,
[in] LONG *rgIndices,
[out] void *pv
);
参数
[in] psa
由 SafeArrayCreate 创建的数组描述符。
[in] rgIndices
数组每个维度的索引向量。 最右侧 (最小有效) 维度为 rgIndices[0]。 最左侧的维度存储在 rgIndices[psa->cDims – 1]
。
[out] pv
数组的 元素。
返回值
此函数可以返回其中一个值。
返回代码 | 说明 |
---|---|
|
成功。 |
|
指定的索引无效。 |
|
其中一个参数无效。 |
|
无法为 元素分配内存。 |
注解
此函数在检索元素之前和之后自动调用 SafeArrayLock 和 SafeArrayUnlock 。 调用方必须提供大小正确的存储区域才能接收数据。 如果数据元素是字符串、对象或变量,则函数会以正确的方式复制该元素。
示例
以下示例取自 COM 基础知识 SPoly 示例 (Cenumpt.cpp) 。
STDMETHODIMP CEnumPoint::Next(
ULONG celt,
VARIANT rgvar[],
ULONG * pceltFetched)
{
unsigned int i;
long ix;
HRESULT hresult;
for(i = 0; i < celt; ++i)
VariantInit(&rgvar[i]);
for(i = 0; i < celt; ++i){
// Are we at the last element?
if(m_iCurrent == m_celts){
hresult = S_FALSE;
goto LDone;
}
ix = m_iCurrent++;
// m_psa is a global variable that holds the safe array.
hresult = SafeArrayGetElement(m_psa, &ix, &rgvar[i]);
if(FAILED(hresult))
goto LError0;
}
hresult = NOERROR;
LDone:;
if (pceltFetched != NULL)
*pceltFetched = i;
return hresult;
LError0:;
for(i = 0; i < celt; ++i)
VariantClear(&rgvar[i]);
return hresult;
}
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | oleauto.h |
Library | OleAut32.lib |
DLL | OleAut32.dll |