Teilen über


CComSafeArray-Klasse

Diese Klasse ist ein Wrapper für die SAFEARRAY Struktur.

Syntax

template <typename T, VARTYPE _vartype = _ATL_AutomationType<T>::type>
class CComSafeArray

Parameter

T
Der Typ der im Array gespeicherten Daten.

Member

Öffentliche Konstruktoren

Name Beschreibung
CComSafeArray::CComSafeArray Der Konstruktor.
CComSafeArray::~CComSafeArray Der Destruktor.

Öffentliche Methoden

Name Beschreibung
CComSafeArray::Add Fügt ein oder mehrere Elemente oder eine SAFEARRAY Struktur zu einem CComSafeArray.
CComSafeArray::Attach Fügt eine SAFEARRAY Struktur an ein CComSafeArray Objekt an.
CComSafeArray::CopyFrom Kopiert den Inhalt einer SAFEARRAY Struktur in das CComSafeArray Objekt.
CComSafeArray::CopyTo Erstellt eine Kopie des CComSafeArray-Objekts.
CComSafeArray::Create Erstellt ein CComSafeArray-Objekt.
CComSafeArray::Destroy Zerstört ein CComSafeArray -Objekt.
CComSafeArray::Detach Trennt ein SAFEARRAY Objekt CComSafeArray .
CComSafeArray::GetAt Ruft ein einzelnes Element aus einem eindimensionalen Array ab.
CComSafeArray::GetCount Gibt die Anzahl der Elemente des Arrays zurück.
CComSafeArray::GetDimensions Gibt die Anzahl der Dimensionen des Arrays zurück.
CComSafeArray::GetLowerBound Gibt die untere Grenze für eine bestimmte Dimension des Arrays zurück.
CComSafeArray::GetSafeArrayPtr Gibt die Adresse des m_psa -Datenelements zurück.
CComSafeArray::GetType Gibt den Typ der im Array gespeicherten Daten zurück.
CComSafeArray::GetUpperBound Gibt die obere Grenze für eine bestimmte Dimension des Arrays zurück.
CComSafeArray::IsSizable Testet, ob die Größe eines CComSafeArray -Objekts geändert werden kann.
CComSafeArray::MultiDimGetAt Ruft ein einzelnes Element aus einem mehrdimensionalen Array ab.
CComSafeArray::MultiDimSetAt Legt den Wert eines Elements in einem mehrdimensionalen Array fest.
CComSafeArray::Resize Ändert die Größe eines CComSafeArray -Objekts.
CComSafeArray::SetAt Legt den Wert eines Elements in einem eindimensionalen Array fest.

Öffentliche Operatoren

Name Beschreibung
CComSafeArray::operator LPSAFEARRAY Wandelt einen Wert in einen SAFEARRAY Zeiger um.
CComSafeArray::operator[] Ruft ein Element aus dem Array ab.
CComSafeArray::operator = Zuweisungsoperator.

Öffentliche Datenmember

Name Beschreibung
CComSafeArray::m_psa Dieses Datenelement enthält die Adresse der SAFEARRAY Struktur.

Hinweise

CComSafeArray stellt einen Wrapper für die SAFEARRAY Datentypklasse bereit, wodurch es einfach ist, einzelne und multidimensionale Arrays von fast allen unterstützten VARIANT Typen zu erstellen und zu verwalten.

CComSafeArray vereinfacht die Übergabe von Arrays zwischen Prozessen und bietet darüber hinaus zusätzliche Sicherheit durch Überprüfen der Arrayindexwerte anhand der oberen und unteren Grenzen.

Die untere Grenze eines CComSafeArray kann bei einem beliebigen benutzerdefinierten Wert beginnen, Arrays, auf die über C++ zugegriffen wird, sollte jedoch eine Untergrenze von 0 verwenden. Andere Sprachen wie Visual Basic können andere Begrenzungswerte (z. B. -10 bis 10) verwenden.

Dient CComSafeArray::Create zum Erstellen eines CComSafeArray Objekts und CComSafeArray::Destroy zum Löschen.

A CComSafeArray kann die folgende Teilmenge von VARIANT Datentypen enthalten:

VARTYPE Beschreibung
VT_I1 char
VT_I2 short
VT_I4 int
VT_I4 long
VT_I8 longlong
VT_UI1 byte
VT_UI2 ushort
VT_UI4 uint
VT_UI4 ulong
VT_UI8 ulonglong
VT_R4 float
VT_R8 double
VT_DECIMAL Dezimalzeiger
VT_VARIANT Variant-Zeiger
VT_CY Currency-Datentyp

Anforderungen

Kopfball: atlsafe.h

Beispiel

// Create a multidimensional array, 
// then write and read elements

// Define an array of character pointers
CComSafeArray<char> *pSar;

char cElement;
char cTable[2][3] = {'A','B','C','D','E','F'};

// Declare the variable used to store the
// array indexes
LONG aIndex[2];

// Define the array bound structure
CComSafeArrayBound bound[2];
bound[0].SetCount(2);
bound[0].SetLowerBound(0);
bound[1].SetCount(3);
bound[1].SetLowerBound(0);   

// Create a new 2 dimensional array
// each dimension size is 3
pSar = new CComSafeArray<char>(bound,2); 

// Use MultiDimSetAt to store characters in the array
for (int x = 0; x < 2; x++)
{
   for (int y = 0; y < 3; y++)
   {
      aIndex[0] = x;
      aIndex[1] = y;
      HRESULT hr = pSar->MultiDimSetAt(aIndex,cTable[x][y]);
      ATLASSERT(hr == S_OK);
   }
}
// Use MultiDimGetAt to retrieve characters in the array
for (int x = 0; x < 2; x++)
{
   for (int y = 0; y < 3; y++)
   {
      aIndex[0]=x;
      aIndex[1]=y;
      HRESULT hr = pSar->MultiDimGetAt(aIndex,cElement);
      ATLASSERT(hr == S_OK);
      ATLASSERT(cElement == cTable[x][y]);
   }   
}

CComSafeArray::Add

Fügt ein oder mehrere Elemente oder eine SAFEARRAY Struktur zu einem CComSafeArray.

HRESULT Add(const SAFEARRAY* psaSrc);
HRESULT Add(ULONG ulCount, const T* pT, BOOL bCopy = TRUE);
HRESULT Add(const T& t, BOOL bCopy = TRUE);

Parameter

psaSrc
Ein Zeiger auf ein SAFEARRAY-Objekt.

ulCount
Die Anzahl der Objekte, die dem Array hinzugefügt werden sollen.

pT
Ein Zeiger auf ein oder mehrere Objekte, die dem Array hinzugefügt werden sollen.

t
Ein Verweis auf das Objekt, das dem Array hinzugefügt werden soll.

bCopy
Gibt an, ob eine Kopie der Daten erstellt werden soll. Der Standardwert ist TRUE.

Rückgabewert

Gibt S_OK bei Erfolg oder bei Einem Fehler einen Fehler HRESULT zurück.

Hinweise

Die neuen Objekte werden am Ende des vorhandenen SAFEARRAY Objekts angefügt. Das Hinzufügen eines Objekts zu einem multidimensionalen SAFEARRAY Objekt wird nicht unterstützt. Beim Hinzufügen eines vorhandenen Arrays von Objekten müssen beide Arrays Elemente desselben Typs enthalten.

Das bCopy Kennzeichen wird berücksichtigt, wenn Elemente vom Typ BSTR oder VARIANT einem Array hinzugefügt werden. Der Standardwert stellt TRUE sicher, dass eine neue Kopie aus den Daten erstellt wird, wenn das Element dem Array hinzugefügt wird.

CComSafeArray::Attach

Fügt eine SAFEARRAY Struktur an ein CComSafeArray Objekt an.

HRESULT Attach(const SAFEARRAY* psaSrc);

Parameter

psaSrc
Ein Zeiger auf die SAFEARRAY Struktur.

Rückgabewert

Gibt S_OK bei Erfolg oder bei Einem Fehler einen Fehler HRESULT zurück.

Hinweise

Fügt eine SAFEARRAY Struktur an ein CComSafeArray Objekt an und stellt die vorhandenen CComSafeArray Methoden zur Verfügung.

CComSafeArray::CComSafeArray

Der Konstruktor.

CComSafeArray();
CComSafeArray(const SAFEARRAYBOUND& bound);
CComSafeArray(ULONG  ulCount, LONG lLBound = 0);
CComSafeArray(const SAFEARRAYBOUND* pBound, UINT uDims = 1);
CComSafeArray(const CComSafeArray& saSrc);
CComSafeArray(const SAFEARRAY& saSrc);
CComSafeArray(const SAFEARRAY* psaSrc);

Parameter

bound
Eine SAFEARRAYBOUND-Struktur.

ulCount
Die Anzahl der Elemente im Array.

lLBound
Der untere Begrenzungswert; d. h. der Index des ersten Elements im Array.

pBound
Ein Zeiger auf eine SAFEARRAYBOUND Struktur.

uDims
Die Anzahl der Dimensionen im Array.

saSrc
Ein Verweis auf eine Struktur oder CComSafeArray ein SAFEARRAY Objekt. In beiden Fällen verwendet der Konstruktor diesen Verweis, um eine Kopie des Arrays zu erstellen, sodass das Array nach der Konstruktion nicht referenziert wird.

psaSrc
Ein Zeiger auf eine SAFEARRAY Struktur. Der Konstruktor verwendet diese Adresse, um eine Kopie des Arrays zu erstellen, sodass nach der Konstruktion nie auf das Array verwiesen wird.

Hinweise

Erstellt ein CComSafeArray-Objekt.

CComSafeArray::~CComSafeArray

Der Destruktor.

~CComSafeArray() throw()

Hinweise

Gibt alle zugeordneten Ressourcen frei.

CComSafeArray::CopyFrom

Kopiert den Inhalt einer SAFEARRAY Struktur in das CComSafeArray Objekt.

HRESULT CopyFrom(LPSAFEARRAY* ppArray);

Parameter

ppArray
Zeigen Sie auf den SAFEARRAY zu kopierenden Zeiger.

Rückgabewert

Gibt S_OK bei Erfolg oder bei Einem Fehler einen Fehler HRESULT zurück.

Hinweise

Mit dieser Methode wird der Inhalt eines SAFEARRAY Objekts in das aktuelle CComSafeArray Objekt kopiert. Der vorhandene Inhalt des Arrays wird ersetzt.

CComSafeArray::CopyTo

Erstellt eine Kopie des CComSafeArray-Objekts.

HRESULT CopyTo(LPSAFEARRAY* ppArray);

Parameter

ppArray
Ein Zeiger auf eine Position, an der das neue SAFEARRAYerstellt werden soll.

Rückgabewert

Gibt S_OK bei Erfolg oder bei Einem Fehler einen Fehler HRESULT zurück.

Hinweise

Diese Methode kopiert den Inhalt eines CComSafeArray Objekts in eine SAFEARRAY Struktur.

CComSafeArray::Create

Erstellt eine CComSafeArray.

HRESULT Create(const SAFEARRAYBOUND* pBound, UINT uDims = 1);
HRESULT Create(ULONG ulCount = 0, LONG lLBound = 0);

Parameter

pBound
Ein Zeiger auf ein SAFEARRAYBOUND-Objekt.

uDims
Die Anzahl der Dimensionen im Array.

ulCount
Die Anzahl der Elemente im Array.

lLBound
Der untere Begrenzungswert; d. h. der Index des ersten Elements im Array.

Rückgabewert

Gibt S_OK bei Erfolg oder bei Einem Fehler einen Fehler HRESULT zurück.

Hinweise

Ein CComSafeArray Objekt kann aus einer vorhandenen SAFEARRAYBOUND Struktur und der Anzahl der Dimensionen oder durch Angeben der Anzahl der Elemente im Array und der unteren Grenze erstellt werden. Wenn auf das Array von C++ zugegriffen werden soll, sollte die untere Grenze 0 sein. Andere Sprachen können andere Werte für die untere Grenze zulassen (z. B. unterstützt Visual Basic Arrays mit Elementen mit einem Bereich wie -10 bis 10).

CComSafeArray::Destroy

Zerstört ein CComSafeArray -Objekt.

HRESULT Destroy();

Rückgabewert

Gibt S_OK bei Erfolg oder bei Einem Fehler einen Fehler HRESULT zurück.

Hinweise

Zerstört ein vorhandenes CComSafeArray Objekt und alle darin enthaltenen Daten.

CComSafeArray::Detach

Trennt ein SAFEARRAY Objekt CComSafeArray .

LPSAFEARRAY Detach();

Rückgabewert

Gibt einen Zeiger auf ein SAFEARRAY Objekt zurück.

Hinweise

Mit dieser Methode wird das SAFEARRAY Objekt vom CComSafeArray Objekt getrennt.

CComSafeArray::GetAt

Ruft ein einzelnes Element aus einem eindimensionalen Array ab.

T& GetAt(LONG lIndex) const;

Parameter

lIndex
Die Indexnummer des Zurückzugebenden Werts im Array.

Rückgabewert

Gibt einen Verweis auf das erforderliche Arrayelement zurück.

CComSafeArray::GetCount

Gibt die Anzahl der Elemente des Arrays zurück.

ULONG GetCount(UINT uDim = 0) const;

Parameter

uDim
Die Arraydimension.

Rückgabewert

Gibt die Anzahl der Elemente des Arrays zurück.

Hinweise

Bei Verwendung mit einem multidimensionalen Array gibt diese Methode nur die Anzahl der Elemente in einer bestimmten Dimension zurück.

CComSafeArray::GetDimensions

Gibt die Anzahl der Dimensionen des Arrays zurück.

UINT GetDimensions() const;

Rückgabewert

Gibt die Anzahl der Dimensionen des Arrays zurück.

CComSafeArray::GetLowerBound

Gibt die untere Grenze für eine bestimmte Dimension des Arrays zurück.

LONG GetLowerBound(UINT uDim = 0) const;

Parameter

uDim
Die Arraydimension, für die die untere Grenze abgerufen werden soll. Wenn nicht angegeben, ist der Standardwert 0.

Rückgabewert

Gibt die untere Grenze zurück.

Hinweise

Wenn die untere Grenze 0 ist, gibt dies ein C-ähnliches Array an, dessen erstes Element die Elementnummer 0 ist. Im Falle eines Fehlers, z. B. ein ungültiges Dimensionsargument, ruft diese Methode mit einer HRESULT Beschreibung des Fehlers aufAtlThrow.

CComSafeArray::GetSafeArrayPtr

Gibt die Adresse des m_psa -Datenelements zurück.

LPSAFEARRAY* GetSafeArrayPtr() throw();

Rückgabewert

Gibt einen Zeiger auf das CComSafeArray::m_psa Datenelement zurück.

CComSafeArray::GetType

Gibt den Typ der im Array gespeicherten Daten zurück.

VARTYPE GetType() const;

Rückgabewert

Gibt den Datentyp zurück, der im Array gespeichert ist, was eine der folgenden Typen sein kann:

VARTYPE Beschreibung
VT_I1 char
VT_I2 short
VT_I4 int
VT_I4 long
VT_I8 longlong
VT_UI1 byte
VT_UI2 ushort
VT_UI4 uint
VT_UI4 ulong
VT_UI8 ulonglong
VT_R4 float
VT_R8 double
VT_DECIMAL Dezimalzeiger
VT_VARIANT Variant-Zeiger
VT_CY Currency-Datentyp

CComSafeArray::GetUpperBound

Gibt die obere Grenze für eine bestimmte Dimension des Arrays zurück.

LONG GetUpperBound(UINT uDim = 0) const;

Parameter

uDim
Die Arraydimension, für die die obere Grenze abgerufen werden soll. Wenn nicht angegeben, ist der Standardwert 0.

Rückgabewert

Gibt die obere Grenze zurück. Dieser Wert ist einschließlich, der maximal gültige Index für diese Dimension.

Hinweise

Im Falle eines Fehlers, z. B. ein ungültiges Dimensionsargument, ruft diese Methode mit einer HRESULT Beschreibung des Fehlers aufAtlThrow.

CComSafeArray::IsSizable

Testet, ob die Größe eines CComSafeArray -Objekts geändert werden kann.

bool IsSizable() const;

Rückgabewert

Gibt zurück TRUE , wenn die CComSafeArray Größe geändert werden kann, FALSE wenn sie nicht möglich ist.

CComSafeArray::m_psa

Enthält die Adresse der Struktur, auf die SAFEARRAY zugegriffen wird.

LPSAFEARRAY m_psa;

CComSafeArray::MultiDimGetAt

Ruft ein einzelnes Element aus einem mehrdimensionalen Array ab.

HRESULT MultiDimGetAt(const LONG* alIndex, T& t);

Parameter

alIndex
Zeiger auf einen Vektor von Indizes für jede Dimension im Array. Die äußerste (wichtigste) Dimension von links ist alIndex[0].

t
Ein Verweis auf die zurückgegebenen Daten.

Rückgabewert

Gibt S_OK bei Erfolg oder bei Einem Fehler einen Fehler HRESULT zurück.

CComSafeArray::MultiDimSetAt

Legt den Wert eines Elements in einem mehrdimensionalen Array fest.

HRESULT MultiDimSetAt(const LONG* alIndex, const T& t);

Parameter

alIndex
Zeiger auf einen Vektor von Indizes für jede Dimension im Array. Die äußerst rechte (am wenigsten signifikante) Dimension ist alIndex[0].

T
Gibt den Wert des neuen Elements an.

Rückgabewert

Gibt S_OK bei Erfolg oder bei Einem Fehler einen Fehler HRESULT zurück.

Hinweise

Dies ist eine multidimensionale Version von CComSafeArray::SetAt.

CComSafeArray::operator []

Ruft ein Element aus dem Array ab.

T& operator[](long lindex) const;
T& operator[]int nindex) const;

Parameter

lIndex, nIndex
Die Indexnummer des erforderlichen Elements im Array.

Rückgabewert

Gibt das entsprechende Arrayelement zurück.

Hinweise

Führt eine ähnliche Funktion CComSafeArray::GetAtwie dieser Operator aus, funktioniert jedoch nur mit eindimensionalen Arrays.

CComSafeArray::operator =

Zuweisungsoperator.

ATL::CComSafeArray<T>& operator=(const ATL::CComSafeArray& saSrc);
ATL::CComSafeArray<T>& operator=(const SAFEARRAY* psaSrc);

Parameter

saSrc
Ein Verweis auf ein CComSafeArray-Objekt.

psaSrc
Ein Zeiger auf ein SAFEARRAY-Objekt.

Rückgabewert

Gibt den Typ der im Array gespeicherten Daten zurück.

CComSafeArray::operator LPSAFEARRAY

Wandelt einen Wert in einen SAFEARRAY Zeiger um.

operator LPSAFEARRAY() const;

Rückgabewert

Wandelt einen Wert in einen SAFEARRAY Zeiger um.

CComSafeArray::Resize

Ändert die Größe eines CComSafeArray -Objekts.

HRESULT Resize(const SAFEARRAYBOUND* pBound);
HRESULT Resize(ULONG ulCount, LONG lLBound = 0);

Parameter

pBound
Ein Zeiger auf eine SAFEARRAYBOUND Struktur, die Informationen über die Anzahl der Elemente und die untere Grenze eines Arrays enthält.

ulCount
Die angeforderte Anzahl von Objekten im Array mit geänderter Größe.

lLBound
Die untere Grenze.

Rückgabewert

Gibt S_OK bei Erfolg oder bei Einem Fehler einen Fehler HRESULT zurück.

Hinweise

Diese Methode ändert nur die Größe der äußerst rechten Dimension. Die Größe von Arrays, die zurückgegeben werdenIsResizable, werden nicht geändert.FALSE

CComSafeArray::SetAt

Legt den Wert eines Elements in einem eindimensionalen Array fest.

HRESULT SetAt(LONG lIndex, const T& t, BOOL bCopy = TRUE);

Parameter

lIndex
Die Indexnummer des festzulegenden Arrayelements.

t
Der neue Wert des angegebenen Elements.

bCopy
Gibt an, ob eine Kopie der Daten erstellt werden soll. Der Standardwert ist TRUE.

Rückgabewert

Gibt S_OK bei Erfolg oder bei Einem Fehler einen Fehler HRESULT zurück.

Hinweise

Das bCopy Kennzeichen wird berücksichtigt, wenn Elemente vom Typ BSTR oder VARIANT einem Array hinzugefügt werden. Der Standardwert stellt TRUE sicher, dass eine neue Kopie aus den Daten erstellt wird, wenn das Element dem Array hinzugefügt wird.

Weitere Informationen

SAFEARRAY Datentyp
CComSafeArray::Create
CComSafeArray::Destroy
Klassenübersicht