Função SafeArrayCreateEx (oleauto.h)
Cria e retorna um descritor de matriz segura do VARTYPE especificado, número de dimensões e limites.
Sintaxe
SAFEARRAY * SafeArrayCreateEx(
[in] VARTYPE vt,
[in] UINT cDims,
[in] SAFEARRAYBOUND *rgsabound,
[in] PVOID pvExtra
);
Parâmetros
[in] vt
O tipo base ou VARTYPE de cada elemento da matriz. O sinalizador FADF_RECORD pode ser definido para um tipo variante VT_RECORD, o sinalizador FADF_HAVEIID pode ser definido para VT_DISPATCH ou VT_UNKNOWN e FADF_HAVEVARTYPE pode ser definido para todos os outros VARTYPEs.
[in] cDims
O número de dimensões na matriz.
[in] rgsabound
Um vetor de limites (um para cada dimensão) a ser alocado para a matriz.
[in] pvExtra
as informações de tipo do tipo definido pelo usuário, se você estiver criando uma matriz segura de tipos definidos pelo usuário. Se o parâmetro vt for VT_RECORD, pvExtra será um ponteiro para um IRecordInfo que descreve o registro. Se o parâmetro vt for VT_DISPATCH ou VT_UNKNOWN, pvExtra conterá um ponteiro para um GUID que representa o tipo de interface que está sendo passada para a matriz.
Retornar valor
Um descritor de matriz segura ou nulo se a matriz não puder ser criada.
Comentários
Se VARTYPE for VT_RECORD , SafeArraySetRecordInfo será chamado. Se VARTYPE for VT_DISPATCH ou VT_UNKNOWN, os elementos da matriz deverão conter interfaces do mesmo tipo. Parte do processo de marshaling dessa matriz para outros processos inclui a geração do código proxy/stub do IID apontado pelo parâmetro pvExtra . Para realmente passar interfaces heterogêneas, será necessário especificar IID_IUnknown ou IID_IDispatch no pvExtra e fornecer outros meios para o chamador identificar como consultar a interface real.
Exemplos
O exemplo a seguir descreve como uma matriz segura de tipos definidos pelo usuário é armazenada em uma variante do 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 | Valor |
---|---|
Plataforma de Destino | Windows |
Cabeçalho | oleauto.h |
Biblioteca | OleAut32.lib |
DLL | OleAut32.dll |