SafeArrayGetElement, fonction (oleauto.h)

Récupère un seul élément du tableau.

Syntaxe

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

Paramètres

[in] psa

Descripteur de tableau créé par SafeArrayCreate.

[in] rgIndices

Vecteur d’index pour chaque dimension du tableau. La dimension la plus à droite (la moins significative) est rgIndices[0]. La dimension la plus à gauche est stockée dans rgIndices[psa->cDims – 1].

[out] pv

Élément du tableau.

Valeur retournée

Cette fonction peut retourner l’une de ces valeurs.

Code de retour Description
S_OK
Réussite.
DISP_E_BADINDEX
L’index spécifié n’est pas valide.
E_INVALIDARG
L’un des arguments n’est pas valide.
E_OUTOFMEMORY
La mémoire n’a pas pu être allouée à l’élément .

Remarques

Cette fonction appelle automatiquement SafeArrayLock et SafeArrayUnlock , avant et après la récupération de l’élément. L’appelant doit fournir une zone de stockage de la taille appropriée pour recevoir les données. Si l’élément de données est une chaîne, un objet ou une variante, la fonction copie l’élément de la manière correcte.

Exemples

L’exemple suivant est tiré de l’exemple 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;
}

Configuration requise

Condition requise Valeur
Plateforme cible Windows
En-tête oleauto.h
Bibliothèque OleAut32.lib
DLL OleAut32.dll