Udostępnij za pośrednictwem


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 VARIANTobiekcie .
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 AccessDataelement .
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, COleVariantlub COleSafeArray tablicy).
COleSafeArray::operator == Porównuje dwie tablice wariantów (SAFEARRAY, VARIANT, COleVariantlub 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 VARIANTjest 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, COleVariantlub 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 lub COleVariant 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, COleVariantlub 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 AccessDataelement .

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