Compartilhar via


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