Funzione SafeArrayCreateEx (oleauto.h)
Crea e restituisce un descrittore di matrice sicuro da VARTYPE, numero di dimensioni e limiti specificati.
Sintassi
SAFEARRAY * SafeArrayCreateEx(
[in] VARTYPE vt,
[in] UINT cDims,
[in] SAFEARRAYBOUND *rgsabound,
[in] PVOID pvExtra
);
Parametri
[in] vt
Tipo di base o VARTYPE di ogni elemento della matrice. Il flag FADF_RECORD può essere impostato per un tipo variant VT_RECORD, il flag di FADF_HAVEIID può essere impostato per VT_DISPATCH o VT_UNKNOWN e FADF_HAVEVARTYPE può essere impostato per tutti gli altri VARTYPEs.
[in] cDims
Numero di dimensioni nella matrice.
[in] rgsabound
Vettore di limiti (uno per ogni dimensione) da allocare per la matrice.
[in] pvExtra
informazioni sul tipo del tipo definito dall'utente, se si crea una matrice sicura di tipi definiti dall'utente. Se il parametro vt è VT_RECORD, pvExtra sarà un puntatore a un IRecordInfo che descrive il record. Se il parametro vt è VT_DISPATCH o VT_UNKNOWN, pvExtra conterrà un puntatore a un GUID che rappresenta il tipo di interfaccia passato alla matrice.
Valore restituito
Descrittore di matrice sicuro o Null se non è stato possibile creare la matrice.
Commenti
Se VARTYPE è VT_RECORD, viene chiamato SafeArraySetRecordInfo . Se VARTYPE è VT_DISPATCH o VT_UNKNOWN, gli elementi della matrice devono contenere interfacce dello stesso tipo. Parte del processo di marshalling di questa matrice ad altri processi include la generazione del codice proxy/stub dell'IID a cui punta il parametro pvExtra . Per passare effettivamente interfacce eterogenee, è necessario specificare IID_IUnknown o IID_IDispatch in pvExtra e fornire altri mezzi per il chiamante per identificare come eseguire una query per l'interfaccia effettiva.
Esempio
Nell'esempio seguente viene descritto come viene archiviata una matrice sicura di tipi definiti dall'utente in una variante di 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;
Requisiti
Requisito | Valore |
---|---|
Piattaforma di destinazione | Windows |
Intestazione | oleauto.h |
Libreria | OleAut32.lib |
DLL | OleAut32.dll |