Share via


COleSafeArray-Klasse

Eine Klasse zum Arbeiten mit Arrays beliebiger Dimension und beliebigen Typs.

Syntax

class COleSafeArray : public tagVARIANT

Member

Öffentliche Konstruktoren

Name Beschreibung
COle Tresor Array::COle Tresor Array Erstellt ein COleSafeArray-Objekt.

Öffentliche Methoden

Name Beschreibung
COle Tresor Array::AccessData Ruft einen Zeiger auf die Arraydaten ab.
COle Tresor Array::AllocData Weist Speicher für das Array zu.
COle Tresor Array::AllocDescriptor Weist Speicher für den sicheren Arraydeskriptor zu.
COle Tresor Array::Attach Ermöglicht die Steuerung des vorhandenen VARIANT Arrays für das COleSafeArray Objekt.
COle Tresor Array::Clear Gibt alle Daten im zugrunde liegenden VARIANTFrei.
COle Tresor Array::Copy Erstellt eine Kopie eines vorhandenen Arrays.
COle Tresor Array::Create Erstellt ein sicheres Array.
COle Tresor Array::CreateOneDim Erstellt ein eindimensionales COleSafeArray Objekt.
COle Tresor Array::D estroy Zerstört ein vorhandenes Array.
COle Tresor Array::D estroyData Zerstört Daten in einem sicheren Array.
COle Tresor Array::D estroyDescriptor Zerstört einen Deskriptor eines sicheren Arrays.
COle Tresor Array::D etach Trennt das VARIANT-Array vom COleSafeArray Objekt (sodass die Daten nicht freigegeben werden).
COle Tresor Array::GetByteArray Kopiert den Inhalt des sicheren Arrays in ein CByteArray.
COle Tresor Array::GetDim Gibt die Anzahl der Dimensionen des Arrays zurück.
COle Tresor Array::GetElement Ruft ein einzelnes Element des sicheren Arrays ab.
COle Tresor Array::GetElemSize Gibt die Größe eines Elements in Bytes in einem sicheren Array zurück.
COle Tresor Array::GetLBound Gibt die untere Grenze für jede Dimension eines sicheren Arrays zurück.
COle Tresor Array::GetOneDimSize Gibt die Anzahl der Elemente im eindimensionalen COleSafeArray Objekt zurück.
COle Tresor Array::GetUBound Gibt die obere Grenze für jede Dimension eines sicheren Arrays zurück.
COle Tresor Array::Lock Erhöht die Sperranzahl eines Arrays und platziert einen Zeiger auf die Arraydaten im Arraydeskriptor.
COle Tresor Array::P trOfIndex Gibt einen Zeiger auf das indizierte Element zurück.
COle Tresor Array::P utElement Weist ein einzelnes Element im Array zu.
COle Tresor Array::Redim Ändert die am wenigsten signifikante Grenze (ganz rechts) eines sicheren Arrays.
COle Tresor Array::ResizeOneDim Ändert die Anzahl der Elemente in einem eindimensionalen COleSafeArray Objekt.
COle Tresor Array::UnaccessData Erhöht die Sperranzahl eines Arrays und ungültigt den von AccessData.
COle Tresor Array::Unlock Erhöht die Sperranzahl eines Arrays, sodass die Größe freigegeben oder geändert werden kann.

Öffentliche Operatoren

Name Beschreibung
COle Tresor Array::operator LPCVARIANT Greift auf die zugrunde liegende VARIANT Struktur des COleSafeArray Objekts zu.
COle Tresor Array::operator LPVARIANT Greift auf die zugrunde liegende VARIANT Struktur des COleSafeArray Objekts zu.
COle Tresor Array::operator = Kopiert Werte in ein COleSafeArray Objekt (SAFEARRAY, VARIANT, COleVariantoder COleSafeArray Array).
COle Tresor Array::operator == Vergleicht zwei Variantenarrays (SAFEARRAY, VARIANT, , COleVariantoder COleSafeArray Arrays).
COleSafeArray::operator << Gibt den Inhalt eines COleSafeArray Objekts in den Dumpkontext aus.

Hinweise

COleSafeArray abgeleitet von der OLE-Struktur VARIANT . Die OLE-Memberfunktionen SAFEARRAY sind über COleSafeArray, sowie eine Reihe von Memberfunktionen verfügbar, die speziell für eindimensionale Arrays von Bytes entwickelt wurden.

Vererbungshierarchie

tagVARIANT

COleSafeArray

Anforderungen

Header: afxdisp.h

COle Tresor Array::AccessData

Ruft einen Zeiger auf die Arraydaten ab.

void AccessData(void** ppvData);

Parameter

ppvData
Ein Zeiger auf einen Zeiger auf die Arraydaten.

Hinweise

Bei Fehler löst die Funktion eine CMemoryException oder COleException aus.

Beispiel

void CMainFrame::Sort(VARIANT* vArray)
{
   COleSafeArray sa;
   BSTR* pbstr;
   TCHAR buf[1024];
   LONG cElements, lLBound, lUBound;

   //needed for OLE2T macro below, include afxpriv.h
   USES_CONVERSION;

   // Type check VARIANT parameter. It should contain a BSTR array
   // passed by reference. The array must be passed by reference it is
   // an in-out-parameter.
   if (V_VT(vArray) != (VT_ARRAY | VT_BSTR))
   {
      AfxThrowOleDispatchException(1001,
         _T("Type Mismatch in Parameter. Pass a string array by reference"));
   }

   // clears data in sa and copies the variant data into sa
   sa.Attach(*vArray);

   // Check that array is 1 dimensional
   if (sa.GetDim() != 1)
   {
      AfxThrowOleDispatchException(1002,
         _T("Type Mismatch in Parameter. Pass a one-dimensional array"));
   }

   try
   {
      // Get array bounds.
      sa.GetLBound(1, &lLBound);
      sa.GetUBound(1, &lUBound);

      // Get a pointer to the elements of the array
      // and increments the lock count on the array
      sa.AccessData((LPVOID*)& pbstr);

      //get no. of elements in array
      cElements = lUBound - lLBound + 1;
      for (int i = 0; i < cElements; i++)
      {
         //output the elements of the array
         _stprintf_s(buf, 1024, _T("[%s]\n"), OLE2T(pbstr[i]));
         OutputDebugString(buf);
      }

      //decrement lock count
      sa.UnaccessData();
   }
   catch (COleException* pEx)
   {
      AfxThrowOleDispatchException(1003,
         _T("Unexpected Failure in FastSort method"));
      pEx->Delete();
   }
}

COle Tresor Array::AllocData

Weist Speicher für ein sicheres Array zu.

void AllocData();

Hinweise

Bei Fehler löst die Funktion eine CMemoryException oder COleException aus.

COle Tresor Array::AllocDescriptor

Weist Speicher für den Deskriptor eines sicheren Arrays zu.

void AllocDescriptor(DWORD dwDims);

Parameter

dwDims
Anzahl der Dimensionen im sicheren Array.

Hinweise

Bei Fehler löst die Funktion eine CMemoryException oder COleException aus.

COle Tresor Array::Attach

Ermöglicht die Steuerung der Daten in einem vorhandenen VARIANT Array für das COleSafeArray Objekt.

void Attach(VARIANT& varSrc);

Parameter

varSrc
Ein VARIANT-Objekt. Der varSrc-Parameter muss über den VARTYPE-VT_ARRAY verfügen.

Hinweise

Der Quelltyp VARIANTist auf VT_EMPTY festgelegt. Diese Funktion löscht ggf. die aktuellen Arraydaten.

Beispiel

Sehen Sie sich das Beispiel für COle Tresor Array::AccessData an.

COle Tresor Array::Clear

Löscht das sichere Array.

void Clear();

Hinweise

Die Funktion löscht ein sicheres Array, indem das VARTYPE Objekt auf VT_EMPTY festgelegt wird. Der aktuelle Inhalt wird freigegeben, und das Array wird freigegeben.

COle Tresor Array::COle Tresor Array

Erstellt ein COleSafeArray-Objekt.

COleSafeArray();

COleSafeArray(
    const SAFEARRAY& saSrc,
    VARTYPE vtSrc);

COleSafeArray(
    LPCSAFEARRAY pSrc,
    VARTYPE vtSrc);

COleSafeArray(const COleSafeArray& saSrc);
COleSafeArray(const VARIANT& varSrc);
COleSafeArray(LPCVARIANT pSrc);
COleSafeArray(const COleVariant& varSrc);

Parameter

saSrc
Ein vorhandenes COleSafeArray Objekt oder SAFEARRAY das in das neue COleSafeArray Objekt kopiert werden soll.

vtSrc
Der VARTYPE des neuen COleSafeArray Objekts.

psaSrc
Ein Zeiger auf einen SAFEARRAY , der in das neue COleSafeArray Objekt kopiert werden soll.

varSrc
Ein vorhandenes VARIANT oder COleVariant Objekt, das in das neue COleSafeArray Objekt kopiert werden soll.

pSrc
Ein Zeiger auf ein VARIANT Objekt, das in das neue COleSafeArray Objekt kopiert werden soll.

Hinweise

All diese Konstruktoren erstellen neue COleSafeArray Objekte. Wenn kein Parameter vorhanden ist, wird ein leeres COleSafeArray Objekt erstellt (VT_EMPTY). Wenn das COleSafeArray Objekt aus einem anderen Array kopiert wird, dessen VARTYPE implizit bekannt ist (a COleSafeArray, COleVariantoder VARIANT), wird der VARTYPE des Quellarrays beibehalten und muss nicht angegeben werden. Wenn das COleSafeArray Objekt aus einem anderen Array kopiert wird, dessen VARTYPE nicht bekannt ist (SAFEARRAY), muss der VARTYPE im vtSrc-Parameter angegeben werden.

Bei Fehler löst die Funktion eine CMemoryException oder COleException aus.

COle Tresor Array::Copy

Erstellt eine Kopie eines vorhandenen sicheren Arrays.

void Copy(LPSAFEARRAY* ppsa);

Parameter

ppsa
Zeigen Sie auf eine Position, an der der neue Arraydeskriptor zurückgegeben werden soll.

Hinweise

Bei Fehler löst die Funktion eine CMemoryException oder COleException aus.

COle Tresor Array::Create

Ordnet die Daten für das Array zu und initialisiert sie.

void Create(
    VARTYPE vtSrc,
    DWORD dwDims,
    DWORD* rgElements);

void Create(
    VARTYPE vtSrc,
    DWORD dwDims,
    SAFEARRAYBOUND* rgsabounds);

Parameter

vtSrc
Der Basistyp des Arrays (d. a. vartype jedes Elements des Arrays). Der VARTYPE ist auf eine Teilmenge der Variantentypen beschränkt. Weder das VT_ARRAY noch das VT_BYREF Flag können festgelegt werden. VT_EMPTY und VT_NULL sind keine gültigen Basistypen für das Array. Alle anderen Arten sind legal.

dwDims
Anzahl der Dimensionen im Array. Dies kann geändert werden, nachdem das Array mit Redim erstellt wurde.

rgElements
Zeigen Sie auf ein Array der Anzahl der Elemente für jede Dimension im Array.

rgsabounds
Zeigen Sie auf einen Begrenzungsvektor (eine für jede Dimension), die für das Array zugewiesen werden soll.

Hinweise

Diese Funktion löscht bei Bedarf die aktuellen Arraydaten. Bei Fehler löst die Funktion eine CMemoryException aus.

Beispiel

COleSafeArray saMatrix;
DWORD numElements[] = { 10, 5 };

// creates a 2 dimensional safearray of type VT_I2 
// with size 10x5 elements, with all indices starting at 0(default)
saMatrix.Create(VT_I2, 2, numElements);

ASSERT(saMatrix.GetDim() == 2);

COleSafeArray saVector;
SAFEARRAYBOUND rgsabounds[] = { {5, 2} };

// creates a 1 dimensional safearray of type VT_I1 
// with size 5 elements, with the index starting at 2
saVector.Create(VT_I1, 1, rgsabounds);

ASSERT(saVector.GetDim() == 1);

COle Tresor Array::CreateOneDim

Erstellt ein neues eindimensionales COleSafeArray Objekt.

void CreateOneDim(
    VARTYPE vtSrc,
    DWORD dwElements,
    const void* pvSrcData = NULL,
    long nLBound = 0);

Parameter

vtSrc
Der Basistyp des Arrays (d. a. vartype jedes Elements des Arrays).

dwElements
Anzahl der Elemente im Array. Dies kann geändert werden, nachdem das Array mit ResizeOneDim erstellt wurde.

pvSrcData
Zeigen Sie auf die Daten, die in das Array kopiert werden sollen.

nLBound
Die untere Grenze des Arrays.

Hinweise

Die Funktion weist die Daten für das Array zu und initialisiert sie, und kopiert die angegebenen Daten, wenn der Zeiger pvSrcData nicht NULL ist.

Bei Fehler löst die Funktion eine CMemoryException aus.

Beispiel

VARIANT varColInfo[3];

//initialize VARIANTs
for (int i = 0; i < 3; i++)
   VariantInit(&varColInfo[i]);

// Column Name
varColInfo[0].vt = VT_BSTR;
varColInfo[0].bstrVal = ::SysAllocString(L"Name");

// Column Type
varColInfo[1].vt = VT_UI4;
varColInfo[1].lVal = 1;

COleSafeArray sa;
//create a 1 dimensional safearray of VARIANTs
//& initialize it with varColInfo VARIANT array
sa.CreateOneDim(VT_VARIANT, 2, varColInfo);

//check that the dimension is 2
ASSERT(sa.GetOneDimSize() == 2);

//increase safearray size by 1
sa.ResizeOneDim(3);

// populate the last element of the safearray, (Column Size)
varColInfo[2].vt = VT_I4;
varColInfo[2].lVal = 30;
long el = 2;
sa.PutElement(&el, &varColInfo[2]);

COle Tresor Array::D estroy

Zerstört einen vorhandenen Arraydeskriptor und alle Daten im Array.

void Destroy();

Hinweise

Wenn Objekte im Array gespeichert sind, wird jedes Objekt freigegeben. Bei Fehler löst die Funktion eine CMemoryException oder COleException aus.

COle Tresor Array::D estroyData

Zerstört alle Daten in einem sicheren Array.

void DestroyData();

Hinweise

Wenn Objekte im Array gespeichert sind, wird jedes Objekt freigegeben. Bei Fehler löst die Funktion eine CMemoryException oder COleException aus.

COle Tresor Array::D estroyDescriptor

Zerstört einen Deskriptor eines sicheren Arrays.

void DestroyDescriptor();

Hinweise

Bei Fehler löst die Funktion eine CMemoryException oder COleException aus.

COle Tresor Array::D etach

Trennt die VARIANT Daten vom COleSafeArray Objekt.

VARIANT Detach();

Rückgabewert

Der zugrunde liegende VARIANT Wert im COleSafeArray Objekt.

Hinweise

Die Funktion trennt die Daten in einem sicheren Array, indem der VARTYPE des Objekts auf VT_EMPTY festgelegt wird. Es liegt in der Verantwortung des Aufrufers, das Array durch Aufrufen der Windows-Funktion VariantClear freizusprechen.

Bei Fehler löst die Funktion eine COleException aus.

Beispiel

Sehen Sie sich das Beispiel für COle Tresor Array::P utElement an.

COle Tresor Array::GetByteArray

Kopiert den Inhalt des sicheren Arrays in ein CByteArray.

void GetByteArray(CByteArray& bytes);

Parameter

bytes
Ein Verweis auf ein CByteArray-Objekt .

COle Tresor Array::GetDim

Gibt die Anzahl der Dimensionen im COleSafeArray Objekt zurück.

DWORD GetDim();

Rückgabewert

Die Anzahl der Dimensionen im sicheren Array.

Beispiel

COleSafeArray saMatrix;
DWORD numElements[] = { 10, 5 };

// creates a 2 dimensional safearray of type VT_I2 
// with size 10x5 elements, with all indices starting at 0(default)
saMatrix.Create(VT_I2, 2, numElements);

ASSERT(saMatrix.GetDim() == 2);

COleSafeArray saVector;
SAFEARRAYBOUND rgsabounds[] = { {5, 2} };

// creates a 1 dimensional safearray of type VT_I1 
// with size 5 elements, with the index starting at 2
saVector.Create(VT_I1, 1, rgsabounds);

ASSERT(saVector.GetDim() == 1);

COle Tresor Array::GetElement

Ruft ein einzelnes Element des sicheren Arrays ab.

void GetElement(
    long* rgIndices,
    void* pvData);

Parameter

rgIndices
Zeiger auf ein Array von Indizes für jede Dimension des Arrays.

pvData
Zeigen Sie auf die Position, an der das Element des Arrays platziert werden soll.

Hinweise

Diese Funktion ruft automatisch die Fensterfunktionen SafeArrayLock und vor und SafeArrayUnlock nach dem Abrufen des Elements auf. Wenn es sich bei dem Datenelement um eine Zeichenfolge, ein Objekt oder eine Variante handelt, kopiert die Funktion das Element auf die richtige Weise. Der Parameter pvData sollte auf einen großen Puffer zeigen, um das Element zu enthalten.

Bei Fehler löst die Funktion eine CMemoryException oder COleException aus.

Beispiel

//sa is of type COleSafeArray with 2 dimensions

//Determine upper bounds for both dimensions
long lNumRows;
long lNumCols;
sa.GetUBound(1, &lNumRows);
sa.GetUBound(2, &lNumCols);

//Display the elements in the SAFEARRAY.
long index[2];
VARIANT val;

//Determine lower bounds for both dimensions
long lowRow, lowCol;
sa.GetLBound(1, &lowRow);
sa.GetLBound(2, &lowCol);

for (long r = lowRow; r <= lNumRows; r++)
{
   for (long c = lowCol; c <= lNumCols; c++)
   {
      index[0] = r;
      index[1] = c;

      //retrieve each element of the safearray
      sa.GetElement(index, &val);

      switch (val.vt)
      {
      case VT_R8:
         TRACE(_T("%1.2f\n"), val.dblVal);
         break;

      case VT_BSTR:
         TRACE(_T("%s\n"), (CString)val.bstrVal);
         break;

         // other cases omitted

      case VT_EMPTY:
         TRACE(_T("<empty>\n"));
         break;
      }
   }
}

COle Tresor Array::GetElemSize

Ruft die Größe eines Elements in einem COleSafeArray Objekt ab.

DWORD GetElemSize();

Rückgabewert

Die Größe der Elemente eines sicheren Arrays in Bytes.

COle Tresor Array::GetLBound

Gibt die untere Grenze für eine beliebige Dimension eines COleSafeArray Objekts zurück.

void GetLBound(
    DWORD dwDim,
    long* pLBound);

Parameter

dwDim
Die Arraydimension, für die die untere Grenze abgerufen werden soll.

pLBound
Zeigen Sie auf die Position, um die untere Grenze zurückzugeben.

Hinweise

Bei Fehler löst die Funktion eine COleException aus.

Beispiel

COleSafeArray saMatrix;
DWORD numElements[] = { 10, 5 };

// creates a 2 dimensional safearray of type VT_I2 
// with size 10x5 elements, with all indices starting at 0(default)
saMatrix.Create(VT_I2, 2, numElements);

long lLBound;

//get lower bound for 1st dimension
saMatrix.GetLBound(1, &lLBound);

ASSERT(lLBound == 0);

//get lower for 2nd dimension
saMatrix.GetLBound(2, &lLBound);

ASSERT(lLBound == 0);

COleSafeArray saVector;
SAFEARRAYBOUND rgsabounds[] = { {5, 1} };

// creates a 1 dimensional safearray of type VT_I1 
// with size 5 elements, with the index starting at 1
saVector.Create(VT_I1, 1, rgsabounds);

//get lower bound for 1st dimension
saVector.GetLBound(1, &lLBound);

ASSERT(lLBound == 1);

COle Tresor Array::GetOneDimSize

Gibt die Anzahl der Elemente im eindimensionalen COleSafeArray Objekt zurück.

DWORD GetOneDimSize();

Rückgabewert

Die Anzahl der Elemente im eindimensionalen sicheren Array.

Beispiel

Sehen Sie sich das Beispiel für COle Tresor Array::CreateOneDim an.

COle Tresor Array::GetUBound

Gibt die obere Grenze für jede Dimension eines sicheren Arrays zurück.

void GetUBound(
    DWORD dwDim,
    long* pUBound);

Parameter

dwDim
Die Arraydimension, für die die obere Grenze abgerufen werden soll.

pUBound
Zeigen Sie auf die Position, um die obere Grenze zurückzugeben.

Hinweise

Bei Fehler löst die Funktion eine COleException aus.

Beispiel

COleSafeArray saMatrix;
DWORD numElements[] = { 10, 5 };

// creates a 2 dimensional safearray of type VT_I2 
// with size 10x5 elements, with all indices starting at 0(default)
saMatrix.Create(VT_I2, 2, numElements);

long lUBound;
ASSERT(saMatrix.GetDim() == 2);

//get upper bound for 1st dimension
saMatrix.GetUBound(1, &lUBound);

ASSERT(lUBound == 9);

//get upper bound for 2nd dimension
saMatrix.GetUBound(2, &lUBound);

ASSERT(lUBound == 4);

COleSafeArray saVector;
SAFEARRAYBOUND rgsabounds[] = { {5, 1} };

// creates a 1 dimensional safearray of type VT_I1 
// with size 5 elements, with the index starting at 1
saVector.Create(VT_I1, 1, rgsabounds);

//get upper bound for 1st dimension
saVector.GetUBound(1, &lUBound);

ASSERT(lUBound == 5);

COle Tresor Array::Lock

Erhöht die Sperranzahl eines Arrays und platziert einen Zeiger auf die Arraydaten im Arraydeskriptor.

void Lock();

Hinweise

Beim Fehler wird eine COleException ausgelöst.

Der Zeiger im Arraydeskriptor ist gültig, bis Unlock er aufgerufen wird. Lock Anrufe können geschachtelt werden; eine gleiche Anzahl von Anrufen Unlock ist erforderlich.

Ein Array kann nicht gelöscht werden, während es gesperrt ist.

COle Tresor Array::operator LPCVARIANT

Rufen Sie diesen Umwandlungsoperator auf, um auf die zugrunde liegende VARIANT Struktur für dieses COleSafeArray Objekt zuzugreifen.

operator LPCVARIANT() const;

COle Tresor Array::operator LPVARIANT

Rufen Sie diesen Umwandlungsoperator auf, um auf die zugrunde liegende VARIANT Struktur für dieses COleSafeArray Objekt zuzugreifen.

operator LPVARIANT();

Hinweise

Beachten Sie, dass das Ändern des Werts in der VARIANT Struktur, auf die der von dieser Funktion zurückgegebene Zeiger zugreift, den Wert dieses COleSafeArray Objekts ändert.

COle Tresor Array::operator =

Diese überladenen Zuordnungsoperatoren kopieren den Quellwert in dieses COleSafeArray Objekt.

COleSafeArray& operator=(const COleSafeArray& saSrc);
COleSafeArray& operator=(const VARIANT& varSrc);
COleSafeArray& operator=(LPCVARIANT pSrc);
COleSafeArray& operator=(const COleVariant& varSrc);

Hinweise

Eine kurze Beschreibung der einzelnen Operatoren folgt:

  • operator =(saSrc) Kopiert ein vorhandenes COleSafeArray Objekt in dieses Objekt.

  • operator =(varSrc) Kopiert ein vorhandenes VARIANT oder COleVariant Array in dieses Objekt.

  • operator =(pSrc) Kopiert das Arrayobjekt, auf das VARIANT von pSrc zugegriffen wird, in dieses Objekt.

COle Tresor Array::operator ==

Dieser Operator vergleicht zwei Arrays (SAFEARRAY, VARIANT, COleVariant, oder COleSafeArray Arrays) und gibt ungleich null zurück, wenn sie gleich sind; andernfalls 0.

BOOL operator==(const SAFEARRAY& saSrc) const;  BOOL operator==(LPCSAFEARRAY pSrc) const;

BOOL operator==(const COleSafeArray& saSrc) const;  BOOL operator==(const VARIANT& varSrc) const;

BOOL operator==(LPCVARIANT pSrc) const;  BOOL operator==(const COleVariant& varSrc) const;

Hinweise

Zwei Arrays sind gleich, wenn sie eine gleiche Anzahl von Dimensionen, gleiche Größe in jeder Dimension und gleiche Elementwerte aufweisen.

COleSafeArray::operator <<

Der COleSafeArray Einfügeoperator unterstützt<< Diagnosedumping und Speicherung eines COleSafeArray Objekts in einem Archiv.

CDumpContext& AFXAPI operator<<(
    CDumpContext& dc,
    COleSafeArray& saSrc);

COle Tresor Array::P trOfIndex

Gibt einen Zeiger auf das durch die Indexwerte angegebene Element zurück.

void PtrOfIndex(
    long* rgIndices,
    void** ppvData);

Parameter

rgIndices
Ein Array von Indexwerten, die ein Element des Arrays identifizieren. Alle Indizes für das Element müssen angegeben werden.

ppvData
Zeigen Sie beim Zurückgeben auf das Element, das durch die Werte in rgIndices identifiziert wird.

COle Tresor Array::P utElement

Weist ein einzelnes Element im Array zu.

void PutElement(
    long* rgIndices,
    void* pvData);

Parameter

rgIndices
Zeiger auf ein Array von Indizes für jede Dimension des Arrays.

pvData
Zeiger auf die Daten, die dem Array zuzuweisen sind. VT_DISPATCH, VT_UNKNOWN und VT_BSTR Variantentypen sind Zeiger und erfordern keine weitere Dereferenzierungsebene.

Hinweise

Diese Funktion ruft automatisch die Windows-Funktionen Tresor ArrayLock und Tresor ArrayUnlock vor und nach dem Zuweisen des Elements auf. Ist das Datenelement eine Zeichenfolge, ein Objekt oder eine Variante, kopiert die Funktion es korrekt, und wenn das vorhandene Element eine Zeichenfolge, ein Objekt oder eine Variante ist, wird es korrekt gelöscht.

Beachten Sie, dass Sie mehrere Sperren auf einem Array verwenden können, damit Sie Elemente in einem Array platzieren können, während das Array durch andere Vorgänge gesperrt ist.

Bei Fehler löst die Funktion eine CMemoryException oder COleException aus.

Beispiel

VARIANT retVariantArray()
{
   COleSafeArray saRet;
   DWORD numElements[] = { 10, 10 }; // 10x10

   // Create the 2 dimensional safe-array of type VT_R8 with size 10x10
   saRet.Create(VT_R8, 2, numElements);

   // Initialize safearray  with values...
   long index[2];
   for (index[0] = 0; index[0] < 10; index[0]++)
   {
      for (index[1] = 0; index[1] < 10; index[1]++)
      {
         double val = index[0] + index[1] * 10;
         //populate the safearray elements with double values
         saRet.PutElement(index, &val);
      }
   }
   // Return the safe-array encapsulated in a VARIANT...
   return saRet.Detach();
}

COle Tresor Array::Redim

Ändert die am wenigsten signifikante Grenze (ganz rechts) eines sicheren Arrays.

void Redim(SAFEARRAYBOUND* psaboundNew);

Parameter

psaboundNew
Zeiger auf eine neue sichere arraygebundene Struktur, die die neue Arraybindung enthält. Es kann nur die am wenigsten signifikante Dimension eines Arrays geändert werden.

Hinweise

Bei Fehler löst die Funktion eine COleException aus.

COle Tresor Array::ResizeOneDim

Ändert die Anzahl der Elemente in einem eindimensionalen COleSafeArray Objekt.

void ResizeOneDim(DWORD dwElements);

Parameter

dwElements
Anzahl der Elemente im eindimensionalen sicheren Array.

Hinweise

Bei Fehler löst die Funktion eine COleException aus.

Beispiel

Sehen Sie sich das Beispiel für COle Tresor Array::CreateOneDim an.

COle Tresor Array::UnaccessData

Erhöht die Sperranzahl eines Arrays und ungültigt den von AccessData.

void UnaccessData();

Hinweise

Bei Fehler löst die Funktion eine COleException aus.

Beispiel

Sehen Sie sich das Beispiel für COle Tresor Array::AccessData an.

COle Tresor Array::Unlock

Erhöht die Sperranzahl eines Arrays, sodass die Größe freigegeben oder geändert werden kann.

void Unlock();

Hinweise

Diese Funktion wird aufgerufen, nachdem der Zugriff auf die Daten in einem Array abgeschlossen ist. Beim Fehler wird eine COleException ausgelöst.

Siehe auch

Hierarchiediagramm
COleVariant-Klasse
CRecordset-Klasse
CDatabase-Klasse