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 |