SafeArrayCreateEx
Dieser Dokumentation für die Vorschau nur ist und in späteren Versionen geändert. Leere Themen wurden als Platzhalter eingefügt.]
Erstellt und gibt einen sicheres Arraydeskriptor aus der angegebenen VARTYPE Anzahl der Dimensionen und Begrenzungen zurück.
SAFEARRAY SafeArrayCreateEx(
VARTYPE vt,
unsigned int cDims,
SAFEARRAYBOUND * rgsabound
PVOID pvExtra
);
Parameter
vt
Der Basistyp oder die VARTYPE jedes Element des Arrays. Das FADF_RECORD-Flag kann für einen VT_RECORD-variant Typ festgelegt werden, die FADF_HAVEIID-Flag kann festgelegt werden, für VT_DISPATCH oder VT_UNKNOWN und FADF_HAVEVARTYPE für alle anderen VARTYPEs festgelegt werden können. Weitere Informationen über die FADF_RECORD FADF_HAVEIID oder FADF_HAVEVARTYPE Flags finden Sie unter SAFEARRAY-Datentyp.cDims
Anzahl der Dimensionen im Array.rgsabound
Verweist auf ein Vektor von Begrenzungen (eine für jede Dimension) für das Array zugewiesen werden.pvExtra
Verweist auf die Typinformationen des benutzerdefinierten Typs, wenn Sie ein sicheres Array von benutzerdefinierten Typen erstellen. Wenn der Parameter vt VT_RECORD ist, werden pvExtra ein Zeiger auf ein IRecordInfo Beschreibung des Datensatzes. Wenn der Parameter vt VT_DISPATCH oder VT_UNKNOWN ist, enthält pvExtra einen Zeiger auf eine GUID, den Typ der an das Array übergebenen Schnittstelle darstellt.
Rückgabewert
Verweist auf den Arraydeskriptor oder NULL, wenn das Array konnte nicht erstellt werden.
Kommentare
Wenn die VARTYPE VT_RECORD wird SafeArraySetRecordInfo aufgerufen. Ist die VARTYPE VT_DISPATCH oder VT_UNKNOWN müssen die Elemente des Arrays Schnittstellen des gleichen Typs enthalten. Teil des Prozesses der Marshallen dieses Arrays zu anderen Prozessen beinhaltet, generieren den Proxy-Stub-Code für die IID auf pvExtra Parameter verweist. Heterogene Schnittstellen tatsächlich übergeben müssen eine unzulässige IID_IUnknown- oder IID_IDispatch in pvExtra angeben und bieten eine andere Möglichkeit für den Aufrufer identifizieren wie für die aktuelle Schnittstelle abgefragt.
Beispiel
Das folgende Beispiel beschreibt, wie ein sicheres Array von benutzerdefinierten Typen in eine Variante des Typs VT_RECORD gespeichert werden:
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;