SafeArrayCreateEx-Funktion (oleauto.h)

Erstellt und gibt einen sicheren Arraydeskriptor aus dem angegebenen VARTYPE, der angegebenen Anzahl von Dimensionen und Begrenzungen zurück.

Syntax

SAFEARRAY * SafeArrayCreateEx(
  [in] VARTYPE        vt,
  [in] UINT           cDims,
  [in] SAFEARRAYBOUND *rgsabound,
  [in] PVOID          pvExtra
);

Parameter

[in] vt

Der Basistyp oder der VARTYPE jedes Elements des Arrays. Das flag FADF_RECORD kann für einen Variantentyp VT_RECORD, das FADF_HAVEIID-Flag für VT_DISPATCH oder VT_UNKNOWN und FADF_HAVEVARTYPE für alle anderen VARTYPEs festgelegt werden.

[in] cDims

Die Anzahl der Dimensionen im Array.

[in] rgsabound

Ein Vektor von Grenzen (einer für jede Dimension), der für das Array zugeordnet werden soll.

[in] pvExtra

die Typinformationen des benutzerdefinierten Typs, wenn Sie ein sicheres Array von benutzerdefinierten Typen erstellen. Wenn der vt-Parameter VT_RECORD ist, ist pvExtra ein Zeiger auf eine IRecordInfo,die den Datensatz beschreibt. Wenn der vt-Parameter VT_DISPATCH oder VT_UNKNOWN ist, enthält pvExtra einen Zeiger auf eine GUID, der den Schnittstellentyp darstellt, der an das Array übergeben wird.

Rückgabewert

Ein sicherer Arraydeskriptor oder NULL, wenn das Array nicht erstellt werden konnte.

Hinweise

Wenn VARTYPE VT_RECORD wird SafeArraySetRecordInfo aufgerufen. Wenn VARTYPE VT_DISPATCH oder VT_UNKNOWN, müssen die Elemente des Arrays Schnittstellen desselben Typs enthalten. Teil des Marshallvorgangs dieses Arrays für andere Prozesse ist das Generieren des Proxy-/Stubcodes der IID, auf die der parameter pvExtra verweist. Um heterogene Schnittstellen tatsächlich zu übergeben, muss man entweder IID_IUnknown oder IID_IDispatch in pvExtra angeben und dem Aufrufer andere Mittel bereitstellen, um zu ermitteln, wie die tatsächliche Schnittstelle abgefragt werden soll.

Beispiele

Im folgenden Beispiel wird beschrieben, wie ein sicheres Array benutzerdefinierter Typen in einer Variante des Typs VT_RECORD gespeichert wird.

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;

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile oleauto.h
Bibliothek OleAut32.lib
DLL OleAut32.dll