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 |
程式庫 | OleAut32.lib |
Dll | OleAut32.dll |