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;