Fungsi SafeArrayGetElement (oleauto.h)

Mengambil elemen tunggal dari array.

Sintaks

HRESULT SafeArrayGetElement(
  [in]  SAFEARRAY *psa,
  [in]  LONG      *rgIndices,
  [out] void      *pv
);

Parameter

[in] psa

Deskriptor array yang dibuat oleh SafeArrayCreate.

[in] rgIndices

Vektor indeks untuk setiap dimensi array. Dimensi paling kanan (paling tidak signifikan) adalah rgIndices[0]. Dimensi paling kiri disimpan di rgIndices[psa->cDims – 1].

[out] pv

Elemen array.

Nilai kembali

Fungsi ini dapat mengembalikan salah satu nilai ini.

Menampilkan kode Deskripsi
S_OK
Berhasil.
DISP_E_BADINDEX
Indeks yang ditentukan tidak valid.
E_INVALIDARG
Salah satu argumen tidak valid.
E_OUTOFMEMORY
Memori tidak dapat dialokasikan untuk elemen .

Keterangan

Fungsi ini memanggil SafeArrayLock dan SafeArrayUnlock secara otomatis, sebelum dan sesudah mengambil elemen . Pemanggil harus menyediakan area penyimpanan dengan ukuran yang benar untuk menerima data. Jika elemen data adalah string, objek, atau varian, fungsi menyalin elemen dengan cara yang benar.

Contoh

Contoh berikut diambil dari sampel COM Fundamentals 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;
}

Persyaratan

Persyaratan Nilai
Target Platform Windows
Header oleauto.h
Pustaka OleAut32.lib
DLL OleAut32.dll