COleSafeArray-Klasse
Eine Klasse zum Arbeiten mit Arrays beliebiger Dimension und beliebigen Typs.
Syntax
class COleSafeArray : public tagVARIANT
Member
Öffentliche Konstruktoren
Name | Beschreibung |
---|---|
COleSafeArray::COleSafeArray | Erstellt ein COleSafeArray -Objekt. |
Öffentliche Methoden
Name | Beschreibung |
---|---|
COleSafeArray::AccessData | Ruft einen Zeiger auf die Arraydaten ab. |
COleSafeArray::AllocData | Weist Speicher für das Array zu. |
COleSafeArray::AllocDescriptor | Weist Speicher für den sicheren Arraydeskriptor zu. |
COleSafeArray::Attach | Ermöglicht die Steuerung des vorhandenen VARIANT Arrays für das COleSafeArray Objekt. |
COleSafeArray::Clear | Gibt alle Daten im zugrunde liegenden VARIANT Frei. |
COleSafeArray::Copy | Erstellt eine Kopie eines vorhandenen Arrays. |
COleSafeArray::Create | Erstellt ein sicheres Array. |
COleSafeArray::CreateOneDim | Erstellt ein eindimensionales COleSafeArray Objekt. |
COleSafeArray::D estroy | Zerstört ein vorhandenes Array. |
COleSafeArray::D estroyData | Zerstört Daten in einem sicheren Array. |
COleSafeArray::D estroyDescriptor | Zerstört einen Deskriptor eines sicheren Arrays. |
COleSafeArray::D etach | Trennt das VARIANT-Array vom COleSafeArray Objekt (sodass die Daten nicht freigegeben werden). |
COleSafeArray::GetByteArray | Kopiert den Inhalt des sicheren Arrays in ein CByteArray. |
COleSafeArray::GetDim | Gibt die Anzahl der Dimensionen des Arrays zurück. |
COleSafeArray::GetElement | Ruft ein einzelnes Element des sicheren Arrays ab. |
COleSafeArray::GetElemSize | Gibt die Größe eines Elements in Bytes in einem sicheren Array zurück. |
COleSafeArray::GetLBound | Gibt die untere Grenze für jede Dimension eines sicheren Arrays zurück. |
COleSafeArray::GetOneDimSize | Gibt die Anzahl der Elemente im eindimensionalen COleSafeArray Objekt zurück. |
COleSafeArray::GetUBound | Gibt die obere Grenze für jede Dimension eines sicheren Arrays zurück. |
COleSafeArray::Lock | Erhöht die Sperranzahl eines Arrays und platziert einen Zeiger auf die Arraydaten im Arraydeskriptor. |
COleSafeArray::P trOfIndex | Gibt einen Zeiger auf das indizierte Element zurück. |
COleSafeArray::P utElement | Weist ein einzelnes Element im Array zu. |
COleSafeArray::Redim | Ändert die am wenigsten signifikante Grenze (ganz rechts) eines sicheren Arrays. |
COleSafeArray::ResizeOneDim | Ändert die Anzahl der Elemente in einem eindimensionalen COleSafeArray Objekt. |
COleSafeArray::UnaccessData | Erhöht die Sperranzahl eines Arrays und ungültigt den von AccessData . |
COleSafeArray::Unlock | Erhöht die Sperranzahl eines Arrays, sodass die Größe freigegeben oder geändert werden kann. |
Öffentliche Operatoren
Name | Beschreibung |
---|---|
COleSafeArray::operator LPCVARIANT | Greift auf die zugrunde liegende VARIANT Struktur des COleSafeArray Objekts zu. |
COleSafeArray::operator LPVARIANT | Greift auf die zugrunde liegende VARIANT Struktur des COleSafeArray Objekts zu. |
COleSafeArray::operator = | Kopiert Werte in ein COleSafeArray Objekt (SAFEARRAY , VARIANT , COleVariant oder COleSafeArray Array). |
COleSafeArray::operator == | Vergleicht zwei Variantenarrays (SAFEARRAY , VARIANT , , COleVariant oder 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
COleSafeArray::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();
}
}
COleSafeArray::AllocData
Weist Speicher für ein sicheres Array zu.
void AllocData();
Hinweise
Bei Fehler löst die Funktion eine CMemoryException oder COleException aus.
COleSafeArray::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.
COleSafeArray::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 VARIANT
ist auf VT_EMPTY festgelegt. Diese Funktion löscht ggf. die aktuellen Arraydaten.
Beispiel
Sehen Sie sich das Beispiel für COleSafeArray::AccessData an.
COleSafeArray::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.
COleSafeArray::COleSafeArray
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
, COleVariant
oder 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.
COleSafeArray::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.
COleSafeArray::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);
COleSafeArray::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]);
COleSafeArray::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.
COleSafeArray::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.
COleSafeArray::D estroyDescriptor
Zerstört einen Deskriptor eines sicheren Arrays.
void DestroyDescriptor();
Hinweise
Bei Fehler löst die Funktion eine CMemoryException oder COleException aus.
COleSafeArray::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 COleSafeArray::P utElement an.
COleSafeArray::GetByteArray
Kopiert den Inhalt des sicheren Arrays in ein CByteArray
.
void GetByteArray(CByteArray& bytes);
Parameter
bytes
Ein Verweis auf ein CByteArray-Objekt .
COleSafeArray::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);
COleSafeArray::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;
}
}
}
COleSafeArray::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.
COleSafeArray::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);
COleSafeArray::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 COleSafeArray::CreateOneDim an.
COleSafeArray::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);
COleSafeArray::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.
COleSafeArray::operator LPCVARIANT
Rufen Sie diesen Umwandlungsoperator auf, um auf die zugrunde liegende VARIANT
Struktur für dieses COleSafeArray
Objekt zuzugreifen.
operator LPCVARIANT() const;
COleSafeArray::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.
COleSafeArray::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
oderCOleVariant
Array in dieses Objekt.operator =( pSrc ) Kopiert das Arrayobjekt, auf das
VARIANT
von pSrc zugegriffen wird, in dieses Objekt.
COleSafeArray::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);
COleSafeArray::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.
COleSafeArray::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 SafeArrayLock und SafeArrayUnlock 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();
}
COleSafeArray::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.
COleSafeArray::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 COleSafeArray::CreateOneDim an.
COleSafeArray::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 COleSafeArray::AccessData an.
COleSafeArray::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