Funzione SafeArrayGetElement (oleauto.h)

Recupera un singolo elemento della matrice.

Sintassi

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

Parametri

[in] psa

Descrittore di matrice creato da SafeArrayCreate.

[in] rgIndices

Vettore di indici per ogni dimensione della matrice. La dimensione più destra (meno significativa) è rgIndices[0]. La dimensione più a sinistra viene archiviata in rgIndices[psa->cDims – 1].

[out] pv

Elemento della matrice.

Valore restituito

Questa funzione può restituire uno di questi valori.

Codice restituito Descrizione
S_OK
Operazione completata.
DISP_E_BADINDEX
L'indice specificato non è valido.
E_INVALIDARG
Uno degli argomenti non è valido.
E_OUTOFMEMORY
Impossibile allocare memoria per l'elemento.

Commenti

Questa funzione chiama automaticamente SafeArrayLock e SafeArrayUnlock , prima e dopo il recupero dell'elemento. Il chiamante deve fornire un'area di archiviazione delle dimensioni corrette per ricevere i dati. Se l'elemento dati è una stringa, un oggetto o una variante, la funzione copia l'elemento nel modo corretto.

Esempio

L'esempio seguente viene tratto dall'esempio 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;
}

Requisiti

Requisito Valore
Piattaforma di destinazione Windows
Intestazione oleauto.h
Libreria OleAut32.lib
DLL OleAut32.dll