Partager via


SafeArrayCreateEx, fonction (oleauto.h)

Crée et retourne un descripteur de tableau sécurisé à partir du VARTYPE, du nombre de dimensions et des limites spécifiés.

Syntaxe

SAFEARRAY * SafeArrayCreateEx(
  [in] VARTYPE        vt,
  [in] UINT           cDims,
  [in] SAFEARRAYBOUND *rgsabound,
  [in] PVOID          pvExtra
);

Paramètres

[in] vt

Type de base ou VARTYPE de chaque élément du tableau. L’indicateur FADF_RECORD peut être défini pour un type de variante VT_RECORD, l’indicateur FADF_HAVEIID peut être défini pour VT_DISPATCH ou VT_UNKNOWN, et FADF_HAVEVARTYPE peut être défini pour tous les autres VARTYPE.

[in] cDims

Nombre de dimensions dans le tableau.

[in] rgsabound

Vecteur de limites (un pour chaque dimension) à allouer pour le tableau.

[in] pvExtra

informations de type du type défini par l’utilisateur, si vous créez un tableau sécurisé de types définis par l’utilisateur. Si le paramètre vt est VT_RECORD, pvExtra est un pointeur vers un IRecordInfo décrivant l’enregistrement. Si le paramètre vt est VT_DISPATCH ou VT_UNKNOWN, pvExtra contient un pointeur vers un GUID représentant le type d’interface passé au tableau.

Valeur retournée

Un descripteur de tableau sécurisé ou null si le tableau n’a pas pu être créé.

Remarques

Si varTYPE est VT_RECORD SafeArraySetRecordInfo est appelé. Si le VARTYPE est VT_DISPATCH ou VT_UNKNOWN les éléments du tableau doivent contenir des interfaces du même type. Une partie du processus de marshaling de ce tableau vers d’autres processus inclut la génération du code proxy/stub de l’IID vers lequel pointe le paramètre pvExtra . Pour passer réellement des interfaces hétérogènes, vous devez spécifier IID_IUnknown ou IID_IDispatch dans pvExtra et fournir d’autres moyens à l’appelant pour identifier comment interroger l’interface réelle.

Exemples

L’exemple suivant décrit comment un tableau sécurisé de types définis par l’utilisateur est stocké dans une variante de type VT_RECORD.

SAFEARRAYBOUND * sab;
sab.cElements = 2;
sab.lLbound = 0;
hresult hr;

SAFEARRAY Sa;
Sa = SafeArrayCreateEx(VT_RECORD, 1, &sab, pRecInfo);
if (Sa == NULL)
   return E_OUTOFMEMORY;

PVOID pvData;
hr = SafeArrayAccessData(Sa, &pvData);
if (FAILED(hr)) {
   SafeArrayDestroy(Sa);
   return hr;
}

TEST * pTest;
pTest = (TEST *)pvData;
pTest[0] = a;
pTest[1] = b;
hr = SafeArrayUnaccessData(Sa);
if (FAILED(hr)) {
   SafeArrayDestroy(Sa);
   return hr;
}

VariantInit(&variant);
V_VT(&variant) = VT_ARRAY|VT_RECORD;
V_ARRAY(&variant) = Sa;

Configuration requise

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