Klasa COleSafeArray
Klasa do pracy z tablicami dowolnego typu i wymiaru.
Składnia
class COleSafeArray : public tagVARIANT
Elementy członkowskie
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
COleSafeArray::COleSafeArray | COleSafeArray Tworzy obiekt. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
COleSafeArray::AccessData | Pobiera wskaźnik do danych tablicy. |
COleSafeArray::AllocData | Przydziela pamięć dla tablicy. |
COleSafeArray::AllocDescriptor | Przydziela pamięć dla deskryptora bezpiecznej tablicy. |
COleSafeArray::Attach | Daje kontrolę nad istniejącą VARIANT tablicą COleSafeArray do obiektu. |
COleSafeArray::Clear | Zwalnia wszystkie dane w bazowym VARIANT obiekcie . |
COleSafeArray::Copy | Tworzy kopię istniejącej tablicy. |
COleSafeArray::Create | Tworzy bezpieczną tablicę. |
COleSafeArray::CreateOneDim | Tworzy obiekt jednowymiarowy COleSafeArray . |
COleSafeArray::D estroy | Niszczy istniejącą tablicę. |
COleSafeArray::D estroyData | Niszczy dane w bezpiecznej tablicy. |
COleSafeArray::D estroyDescriptor | Niszczy deskryptor bezpiecznej tablicy. |
COleSafeArray::D etach | Odłącza tablicę COleSafeArray VARIANT od obiektu (aby dane nie zostaną zwolnione). |
COleSafeArray::GetByteArray | Kopiuje zawartość bezpiecznej tablicy do obiektu CByteArray. |
COleSafeArray::GetDim | Zwraca liczbę wymiarów w tablicy. |
COleSafeArray::GetElement | Pobiera pojedynczy element bezpiecznej tablicy. |
COleSafeArray::GetElemSize | Zwraca rozmiar w bajtach jednego elementu w bezpiecznej tablicy. |
COleSafeArray::GetLBound | Zwraca dolną granicę dla dowolnego wymiaru bezpiecznej tablicy. |
COleSafeArray::GetOneDimSize | Zwraca liczbę elementów w obiekcie jednowymiarowym COleSafeArray . |
COleSafeArray::GetUBound | Zwraca górną granicę dla dowolnego wymiaru bezpiecznej tablicy. |
COleSafeArray::Lock | Zwiększa liczbę blokad tablicy i umieszcza wskaźnik do danych tablicy w deskryptorze tablicy. |
COleSafeArray::P trOfIndex | Zwraca wskaźnik do indeksowanego elementu. |
COleSafeArray::P utElement | Przypisuje pojedynczy element do tablicy. |
COleSafeArray::Redim | Zmienia najmniej znaczącą (po prawej) granicę bezpiecznej tablicy. |
COleSafeArray::ResizeOneDim | Zmienia liczbę elementów w jednowymiarowym COleSafeArray obiekcie. |
COleSafeArray::UnaccessData | Usuwa liczbę blokad tablicy i unieważnia wskaźnik pobrany przez AccessData element . |
COleSafeArray::Unlock | Dekrementuje liczbę blokad tablicy, aby można było ją zwolnić lub zmienić jej rozmiar. |
Operatory publiczne
Nazwa/nazwisko | opis |
---|---|
COleSafeArray::, operator LPCVARIANT | Uzyskuje dostęp do podstawowej VARIANT struktury COleSafeArray obiektu. |
COleSafeArray::operator LPVARIANT | Uzyskuje dostęp do podstawowej VARIANT struktury COleSafeArray obiektu. |
COleSafeArray::operator = | Kopiuje wartości do COleSafeArray obiektu (SAFEARRAY , VARIANT , COleVariant lub COleSafeArray tablicy). |
COleSafeArray::operator == | Porównuje dwie tablice wariantów (SAFEARRAY , VARIANT , COleVariant lub COleSafeArray tablic). |
COleSafeArray::operator << |
Zwraca zawartość COleSafeArray obiektu do kontekstu zrzutu. |
Uwagi
COleSafeArray
pochodzi ze struktury OLE VARIANT
. Funkcje składowe OLE SAFEARRAY
są dostępne za pośrednictwem COleSafeArray
, a także zestawu funkcji składowych zaprojektowanych specjalnie dla tablic jednowymiarowych bajtów.
Hierarchia dziedziczenia
tagVARIANT
COleSafeArray
Wymagania
Nagłówek: afxdisp.h
COleSafeArray::AccessData
Pobiera wskaźnik do danych tablicy.
void AccessData(void** ppvData);
Parametry
ppvData
Wskaźnik do wskaźnika do danych tablicy.
Uwagi
Po błędzie funkcja zgłasza wyjątek CMemoryException lub COleException.
Przykład
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
Przydziela pamięć dla bezpiecznej tablicy.
void AllocData();
Uwagi
Po błędzie funkcja zgłasza wyjątek CMemoryException lub COleException.
COleSafeArray::AllocDescriptor
Przydziela pamięć deskryptorowi bezpiecznej tablicy.
void AllocDescriptor(DWORD dwDims);
Parametry
dwDims
Liczba wymiarów w bezpiecznej tablicy.
Uwagi
Po błędzie funkcja zgłasza wyjątek CMemoryException lub COleException.
COleSafeArray::Attach
Daje kontrolę nad danymi w istniejącej VARIANT
tablicy do COleSafeArray
obiektu.
void Attach(VARIANT& varSrc);
Parametry
varSrc
Obiekt VARIANT
. Parametr varSrc musi mieć VT_ARRAY VARTYPE.
Uwagi
Typ źródła VARIANT
jest ustawiony na wartość VT_EMPTY. Ta funkcja czyści bieżące dane tablicy, jeśli istnieją.
Przykład
Zobacz przykład COleSafeArray ::AccessData.
COleSafeArray::Clear
Czyści bezpieczną tablicę.
void Clear();
Uwagi
Funkcja czyści bezpieczną tablicę, ustawiając VARTYPE
obiekt na VT_EMPTY. Bieżąca zawartość jest zwalniana, a tablica zostanie zwolniona.
COleSafeArray::COleSafeArray
COleSafeArray
Tworzy obiekt.
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);
Parametry
saSrc
Istniejący COleSafeArray
obiekt lub SAFEARRAY
do skopiowania do nowego COleSafeArray
obiektu.
vtSrc
VARTYPE nowego COleSafeArray
obiektu.
psaSrc
Wskaźnik do SAFEARRAY
skopiowania do nowego COleSafeArray
obiektu.
varSrc
Istniejący VARIANT
obiekt lub COleVariant
, który ma zostać skopiowany do nowego COleSafeArray
obiektu.
pSrc
Wskaźnik do obiektu, VARIANT
który ma zostać skopiowany do nowego COleSafeArray
obiektu.
Uwagi
Wszystkie te konstruktory tworzą nowe COleSafeArray
obiekty. Jeśli nie ma parametru, zostanie utworzony pusty COleSafeArray
obiekt (VT_EMPTY). Jeśli obiekt COleSafeArray
jest kopiowany z innej tablicy, której typ VARTYPE jest znany niejawnie (a COleSafeArray
, COleVariant
lub VARIANT
), parametr VARTYPE tablicy źródłowej jest zachowywany i nie trzeba go określać. COleSafeArray
Jeśli obiekt jest kopiowany z innej tablicy, której varTYPE nie jest znany (SAFEARRAY
), parametr VARTYPE musi być określony w parametrze vtSrc.
Po błędzie funkcja zgłasza wyjątek CMemoryException lub COleException.
COleSafeArray::Copy
Tworzy kopię istniejącej bezpiecznej tablicy.
void Copy(LPSAFEARRAY* ppsa);
Parametry
ppsa
Wskaźnik do lokalizacji, w której ma być zwracany nowy deskryptor tablicy.
Uwagi
Po błędzie funkcja zgłasza wyjątek CMemoryException lub COleException.
COleSafeArray::Create
Przydziela i inicjuje dane dla tablicy.
void Create(
VARTYPE vtSrc,
DWORD dwDims,
DWORD* rgElements);
void Create(
VARTYPE vtSrc,
DWORD dwDims,
SAFEARRAYBOUND* rgsabounds);
Parametry
vtSrc
Podstawowy typ tablicy (czyli VARTYPE każdego elementu tablicy). Typ VARTYPE jest ograniczony do podzestawu typów wariantów. Nie można ustawić ani VT_ARRAY, ani flagi VT_BYREF. VT_EMPTY i VT_NULL nie są prawidłowymi typami podstawowymi dla tablicy. Wszystkie inne typy są legalne.
dwDims
Liczba wymiarów w tablicy. Można to zmienić po utworzeniu tablicy za pomocą interfejsu Redim.
rgElements
Wskaźnik do tablicy liczby elementów dla każdego wymiaru w tablicy.
rgsabounds
Wskaźnik do wektora granic (jeden dla każdego wymiaru) do przydzielenia dla tablicy.
Uwagi
Ta funkcja wyczyści bieżące dane tablicy w razie potrzeby. Po błędzie funkcja zgłasza wyjątek CMemoryException.
Przykład
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
Tworzy nowy obiekt jednowymiarowy COleSafeArray
.
void CreateOneDim(
VARTYPE vtSrc,
DWORD dwElements,
const void* pvSrcData = NULL,
long nLBound = 0);
Parametry
vtSrc
Podstawowy typ tablicy (czyli VARTYPE każdego elementu tablicy).
dwElements
Liczba elementów w tablicy. Można to zmienić po utworzeniu tablicy za pomocą polecenia ResizeOneDim.
pvSrcData
Wskaźnik do danych do skopiowania do tablicy.
nLBound
Dolna granica tablicy.
Uwagi
Funkcja przydziela i inicjuje dane dla tablicy, kopiując określone dane, jeśli wskaźnik pvSrcData nie ma wartości NULL.
Po błędzie funkcja zgłasza wyjątek CMemoryException.
Przykład
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
Niszczy istniejący deskryptor tablicy i wszystkie dane w tablicy.
void Destroy();
Uwagi
Jeśli obiekty są przechowywane w tablicy, każdy obiekt jest zwalniany. Po błędzie funkcja zgłasza wyjątek CMemoryException lub COleException.
COleSafeArray::D estroyData
Niszczy wszystkie dane w bezpiecznej tablicy.
void DestroyData();
Uwagi
Jeśli obiekty są przechowywane w tablicy, każdy obiekt jest zwalniany. Po błędzie funkcja zgłasza wyjątek CMemoryException lub COleException.
COleSafeArray::D estroyDescriptor
Niszczy deskryptor bezpiecznej tablicy.
void DestroyDescriptor();
Uwagi
Po błędzie funkcja zgłasza wyjątek CMemoryException lub COleException.
COleSafeArray::D etach
Odłącza VARIANT
dane od COleSafeArray
obiektu.
VARIANT Detach();
Wartość zwracana
Wartość bazowa VARIANT
COleSafeArray
w obiekcie.
Uwagi
Funkcja odłącza dane w bezpiecznej tablicy, ustawiając wartość VARTYPE obiektu na VT_EMPTY. Obowiązkiem obiektu wywołującego jest zwolnienie tablicy przez wywołanie funkcji Windows VariantClear.
Po błędzie funkcja zgłasza wyjątek COleException.
Przykład
Zobacz przykład COleSafeArray::P utElement.
COleSafeArray::GetByteArray
Kopiuje zawartość bezpiecznej tablicy do obiektu CByteArray
.
void GetByteArray(CByteArray& bytes);
Parametry
Bajtów
Odwołanie do obiektu CByteArray .
COleSafeArray::GetDim
Zwraca liczbę wymiarów w COleSafeArray
obiekcie.
DWORD GetDim();
Wartość zwracana
Liczba wymiarów w bezpiecznej tablicy.
Przykład
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
Pobiera pojedynczy element bezpiecznej tablicy.
void GetElement(
long* rgIndices,
void* pvData);
Parametry
Indeksy rgIn
Wskaźnik do tablicy indeksów dla każdego wymiaru tablicy.
pvData
Wskaźnik do lokalizacji, aby umieścić element tablicy.
Uwagi
Ta funkcja automatycznie wywołuje funkcje SafeArrayLock
systemu Windows i SafeArrayUnlock
przed i po pobraniu elementu. Jeśli element danych jest ciągiem, obiektem lub wariantem, funkcja kopiuje element w poprawny sposób. Parametr pvData powinien wskazywać wystarczająco duży bufor, aby zawierał element.
Po błędzie funkcja zgłasza wyjątek CMemoryException lub COleException.
Przykład
//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
Pobiera rozmiar elementu w COleSafeArray
obiekcie.
DWORD GetElemSize();
Wartość zwracana
Rozmiar w bajtach elementów bezpiecznej tablicy.
COleSafeArray::GetLBound
Zwraca dolną granicę COleSafeArray
dla dowolnego wymiaru obiektu.
void GetLBound(
DWORD dwDim,
long* pLBound);
Parametry
dwDim
Wymiar tablicy, dla którego ma być uzyskiwana dolna granica.
pLBound
Wskaźnik do lokalizacji, aby zwrócić dolną granicę.
Uwagi
Po błędzie funkcja zgłasza wyjątek COleException.
Przykład
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
Zwraca liczbę elementów w obiekcie jednowymiarowym COleSafeArray
.
DWORD GetOneDimSize();
Wartość zwracana
Liczba elementów w jednowymiarowej bezpiecznej tablicy.
Przykład
Zobacz przykład COleSafeArray ::CreateOneDim.
COleSafeArray::GetUBound
Zwraca górną granicę dla dowolnego wymiaru bezpiecznej tablicy.
void GetUBound(
DWORD dwDim,
long* pUBound);
Parametry
dwDim
Wymiar tablicy, dla którego ma być pobierana górna granica.
pUBound
Wskaźnik do lokalizacji, aby zwrócić górną granicę.
Uwagi
Po błędzie funkcja zgłasza wyjątek COleException.
Przykład
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
Zwiększa liczbę blokad tablicy i umieszcza wskaźnik do danych tablicy w deskryptorze tablicy.
void Lock();
Uwagi
Po błędzie zgłasza błąd COleException.
Wskaźnik w deskryptorze tablicy jest prawidłowy do momentu Unlock
wywołania. Wywołania mogą Lock
być zagnieżdżone; wymagana jest równa liczba wywołań Unlock
.
Nie można usunąć tablicy, gdy jest ona zablokowana.
COleSafeArray::, operator LPCVARIANT
Wywołaj ten operator rzutowania, aby uzyskać dostęp do bazowej VARIANT
struktury dla tego COleSafeArray
obiektu.
operator LPCVARIANT() const;
COleSafeArray::operator LPVARIANT
Wywołaj ten operator rzutowania, aby uzyskać dostęp do bazowej VARIANT
struktury dla tego COleSafeArray
obiektu.
operator LPVARIANT();
Uwagi
Należy pamiętać, że zmiana wartości w strukturze dostępnej VARIANT
przez wskaźnik zwrócony przez tę funkcję spowoduje zmianę wartości tego COleSafeArray
obiektu.
COleSafeArray::operator =
Te przeciążone operatory przypisania kopiują wartość źródłową do tego COleSafeArray
obiektu.
COleSafeArray& operator=(const COleSafeArray& saSrc);
COleSafeArray& operator=(const VARIANT& varSrc);
COleSafeArray& operator=(LPCVARIANT pSrc);
COleSafeArray& operator=(const COleVariant& varSrc);
Uwagi
Krótki opis każdego operatora:
operator =( saSrc ) Kopiuje istniejący
COleSafeArray
obiekt do tego obiektu.operator =( varSrc ) Kopiuje istniejącą
VARIANT
lubCOleVariant
tablicę do tego obiektu.operator =( pSrc ) Kopiuje
VARIANT
obiekt tablicy, do których uzyskuje dostęp pSrc do tego obiektu.
COleSafeArray::operator ==
Ten operator porównuje dwie tablice (SAFEARRAY
, VARIANT
, COleVariant
lub COleSafeArray
tablice) i zwraca wartość niezerową, jeśli są równe; w przeciwnym razie 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;
Uwagi
Dwie tablice są równe, jeśli mają taką samą liczbę wymiarów, równy rozmiar w każdym wymiarze i równe wartości elementów.
COleSafeArray::operator <<
Operator COleSafeArray
wstawiania (<<) obsługuje dumping diagnostyczny i przechowywanie COleSafeArray
obiektu w archiwum.
CDumpContext& AFXAPI operator<<(
CDumpContext& dc,
COleSafeArray& saSrc);
COleSafeArray::P trOfIndex
Zwraca wskaźnik do elementu określonego przez wartości indeksu.
void PtrOfIndex(
long* rgIndices,
void** ppvData);
Parametry
Indeksy rgIn
Tablica wartości indeksu identyfikujących element tablicy. Należy określić wszystkie indeksy elementu.
ppvData
Po powrocie wskaźnik do elementu zidentyfikowanego przez wartości w indeksach rgIn.
COleSafeArray::P utElement
Przypisuje pojedynczy element do tablicy.
void PutElement(
long* rgIndices,
void* pvData);
Parametry
Indeksy rgIn
Wskaźnik do tablicy indeksów dla każdego wymiaru tablicy.
pvData
Wskaźnik do danych w celu przypisania do tablicy. VT_DISPATCH, VT_UNKNOWN i typy wariantów VT_BSTR to wskaźniki i nie wymagają innego poziomu pośrednia.
Uwagi
Ta funkcja automatycznie wywołuje funkcje systemu Windows SafeArrayLock i SafeArrayUnlock przed i po przypisaniu elementu. Jeśli element danych jest ciągiem, obiektem lub wariantem, funkcja kopiuje go poprawnie, a istniejący element jest ciągiem, obiektem lub wariantem, jest poprawnie czyszczone.
Należy pamiętać, że w tablicy może znajdować się wiele blokad, dzięki czemu można umieścić elementy w tablicy, gdy tablica jest zablokowana przez inne operacje.
Po błędzie funkcja zgłasza wyjątek CMemoryException lub COleException.
Przykład
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
Zmienia najmniej znaczącą (po prawej) granicę bezpiecznej tablicy.
void Redim(SAFEARRAYBOUND* psaboundNew);
Parametry
psaboundNew
Wskaźnik do nowej bezpiecznej struktury powiązanej tablicy zawierającej nową granicę tablicy. Można zmienić tylko najmniej znaczący wymiar tablicy.
Uwagi
Po błędzie funkcja zgłasza wyjątek COleException.
COleSafeArray::ResizeOneDim
Zmienia liczbę elementów w jednowymiarowym COleSafeArray
obiekcie.
void ResizeOneDim(DWORD dwElements);
Parametry
dwElements
Liczba elementów w jednowymiarowej bezpiecznej tablicy.
Uwagi
Po błędzie funkcja zgłasza wyjątek COleException.
Przykład
Zobacz przykład COleSafeArray ::CreateOneDim.
COleSafeArray::UnaccessData
Usuwa liczbę blokad tablicy i unieważnia wskaźnik pobrany przez AccessData
element .
void UnaccessData();
Uwagi
Po błędzie funkcja zgłasza wyjątek COleException.
Przykład
Zobacz przykład COleSafeArray ::AccessData.
COleSafeArray::Unlock
Dekrementuje liczbę blokad tablicy, aby można było ją zwolnić lub zmienić jej rozmiar.
void Unlock();
Uwagi
Ta funkcja jest wywoływana po zakończeniu dostępu do danych w tablicy. Po błędzie zgłasza błąd COleException.
Zobacz też
Wykres hierarchii
Klasa COleVariant
Klasa CRecordset
Klasa CDatabase