Share via


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

陣列的元素。

傳回值

此函式可以傳回下列其中一個值。

傳回碼 描述
S_OK
成功。
DISP_E_BADINDEX
指定的索引無效。
E_INVALIDARG
其中一個自變數無效。
E_OUTOFMEMORY
無法為專案配置記憶體。

備註

此函式會在擷取元素之前和之後自動呼叫 SafeArrayLockSafeArrayUnlock 。 呼叫端必須提供正確大小的儲存區域,才能接收數據。 如果數據元素是字串、物件或變體,函式會以正確的方式複製元素。

範例

下列範例取自 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