Función SafeArrayCreateEx (oleauto.h)

Crea y devuelve un descriptor de matriz seguro a partir del VARTYPE especificado, el número de dimensiones y límites especificados.

Sintaxis

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

Parámetros

[in] vt

Tipo base o VARTYPE de cada elemento de la matriz. La marca de FADF_RECORD se puede establecer para un tipo de variante VT_RECORD, se puede establecer la marca de FADF_HAVEIID para VT_DISPATCH o VT_UNKNOWN, y se puede establecer FADF_HAVEVARTYPE para todos los demás VARTYPEs.

[in] cDims

Número de dimensiones de la matriz.

[in] rgsabound

Vector de límites (uno para cada dimensión) que se va a asignar para la matriz.

[in] pvExtra

la información de tipo del tipo definido por el usuario, si va a crear una matriz segura de tipos definidos por el usuario. Si el parámetro vt está VT_RECORD, pvExtra será un puntero a un IRecordInfo que describe el registro. Si el parámetro vt es VT_DISPATCH o VT_UNKNOWN, pvExtra contendrá un puntero a un GUID que representa el tipo de interfaz que se pasa a la matriz.

Valor devuelto

Descriptor de matriz seguro o null si no se pudo crear la matriz.

Comentarios

Si varTYPE está VT_RECORD, se llama a SafeArraySetRecordInfo . Si VARTYPE es VT_DISPATCH o VT_UNKNOWN, los elementos de la matriz deben contener interfaces del mismo tipo. Parte del proceso de serialización de esta matriz en otros procesos incluye la generación del código proxy/código auxiliar del IID al que apunta el parámetro pvExtra . Para pasar interfaces heterogéneas, deberá especificar IID_IUnknown o IID_IDispatch en pvExtra y proporcionar otros medios para que el autor de la llamada identifique cómo consultar la interfaz real.

Ejemplos

En el ejemplo siguiente se describe cómo se almacena una matriz segura de tipos definidos por el usuario en una variante de tipo 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;

Requisitos

Requisito Value
Plataforma de destino Windows
Encabezado oleauto.h
Library OleAut32.lib
Archivo DLL OleAut32.dll