Klasa COleSafeArray

Klasa do pracy z tablicami dowolnego typu i wymiaru.

Składnia

class COleSafeArray : public tagVARIANT

Członkowie

Konstruktory publiczne

Nazwa/nazwisko opis
COle Sejf Array::COle Sejf Array COleSafeArray Tworzy obiekt.

Metody publiczne

Nazwa/nazwisko opis
COle Sejf Array::AccessData Pobiera wskaźnik do danych tablicy.
COle Sejf Array::AllocData Przydziela pamięć dla tablicy.
COle Sejf Array::AllocDescriptor Przydziela pamięć dla deskryptora bezpiecznej tablicy.
COle Sejf Array::Attach Daje kontrolę nad istniejącą VARIANT tablicą COleSafeArray do obiektu.
COle Sejf Array::Clear Zwalnia wszystkie dane w bazowym VARIANTobiekcie .
COle Sejf Array::Copy Tworzy kopię istniejącej tablicy.
COle Sejf Array::Create Tworzy bezpieczną tablicę.
COle Sejf Array::CreateOneDim Tworzy obiekt jednowymiarowy COleSafeArray .
COle Sejf Array::D estroy Niszczy istniejącą tablicę.
COle Sejf Array::D estroyData Niszczy dane w bezpiecznej tablicy.
COle Sejf Array::D estroyDescriptor Niszczy deskryptor bezpiecznej tablicy.
COle Sejf Array::D etach Odłącza tablicę COleSafeArray VARIANT od obiektu (aby dane nie zostaną zwolnione).
COle Sejf Array::GetByteArray Kopiuje zawartość bezpiecznej tablicy do obiektu CByteArray.
COle Sejf Array::GetDim Zwraca liczbę wymiarów w tablicy.
COle Sejf Array::GetElement Pobiera pojedynczy element bezpiecznej tablicy.
COle Sejf Array::GetElemSize Zwraca rozmiar w bajtach jednego elementu w bezpiecznej tablicy.
COle Sejf Array::GetLBound Zwraca dolną granicę dla dowolnego wymiaru bezpiecznej tablicy.
COle Sejf Array::GetOneDimSize Zwraca liczbę elementów w obiekcie jednowymiarowym COleSafeArray .
COle Sejf Array::GetUBound Zwraca górną granicę dla dowolnego wymiaru bezpiecznej tablicy.
COle Sejf Array::Lock Zwiększa liczbę blokad tablicy i umieszcza wskaźnik do danych tablicy w deskryptorze tablicy.
COle Sejf Array::P trOfIndex Zwraca wskaźnik do indeksowanego elementu.
COle Sejf Array::P utElement Przypisuje pojedynczy element do tablicy.
COle Sejf Array::Redim Zmienia najmniej znaczącą (po prawej) granicę bezpiecznej tablicy.
COle Sejf Array::ResizeOneDim Zmienia liczbę elementów w jednowymiarowym COleSafeArray obiekcie.
COle Sejf Array::UnaccessData Usuwa liczbę blokad tablicy i unieważnia wskaźnik pobrany przez AccessDataelement .
COle Sejf Array::Unlock Dekrementuje liczbę blokad tablicy, aby można było ją zwolnić lub zmienić jej rozmiar.

Operatory publiczne

Nazwa/nazwisko opis
COle Sejf Array::operator LPCVARIANT Uzyskuje dostęp do podstawowej VARIANT struktury COleSafeArray obiektu.
COle Sejf Array::operator LPVARIANT Uzyskuje dostęp do podstawowej VARIANT struktury COleSafeArray obiektu.
COle Sejf Array::operator = Kopiuje wartości do COleSafeArray obiektu (SAFEARRAY, VARIANT, COleVariantlub COleSafeArray tablicy).
COle Sejf Array::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

COle Sejf Array::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();
   }
}

COle Sejf Array::AllocData

Przydziela pamięć dla bezpiecznej tablicy.

void AllocData();

Uwagi

Po błędzie funkcja zgłasza wyjątek CMemoryException lub COleException.

COle Sejf Array::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.

COle Sejf Array::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 COle Sejf Array::AccessData.

COle Sejf Array::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.

COle Sejf Array::COle Sejf Array

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.

COle Sejf Array::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.

COle Sejf Array::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);

COle Sejf Array::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]);

COle Sejf Array::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.

COle Sejf Array::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.

COle Sejf Array::D estroyDescriptor

Niszczy deskryptor bezpiecznej tablicy.

void DestroyDescriptor();

Uwagi

Po błędzie funkcja zgłasza wyjątek CMemoryException lub COleException.

COle Sejf Array::D etach

Odłącza VARIANT dane od COleSafeArray obiektu.

VARIANT Detach();

Wartość zwracana

Wartość bazowa VARIANTCOleSafeArray 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 COle Sejf Array::P utElement.

COle Sejf Array::GetByteArray

Kopiuje zawartość bezpiecznej tablicy do obiektu CByteArray.

void GetByteArray(CByteArray& bytes);

Parametry

Bajtów
Odwołanie do obiektu CByteArray .

COle Sejf Array::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);

COle Sejf Array::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;
      }
   }
}

COle Sejf Array::GetElemSize

Pobiera rozmiar elementu w COleSafeArray obiekcie.

DWORD GetElemSize();

Wartość zwracana

Rozmiar w bajtach elementów bezpiecznej tablicy.

COle Sejf Array::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);

COle Sejf Array::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 COle Sejf Array::CreateOneDim.

COle Sejf Array::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);

COle Sejf Array::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.

COle Sejf Array::operator LPCVARIANT

Wywołaj ten operator rzutowania, aby uzyskać dostęp do bazowej VARIANT struktury dla tego COleSafeArray obiektu.

operator LPCVARIANT() const;

COle Sejf Array::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.

COle Sejf Array::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 tablicę lub COleVariant do tego obiektu.

  • operator =(pSrc) Kopiuje VARIANT obiekt tablicy, do których uzyskuje dostęp pSrc do tego obiektu.

COle Sejf Array::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);

COle Sejf Array::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.

COle Sejf Array::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 Sejf ArrayLock i Sejf ArrayUnlock 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();
}

COle Sejf Array::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.

COle Sejf Array::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 COle Sejf Array::CreateOneDim.

COle Sejf Array::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 COle Sejf Array::AccessData.

COle Sejf Array::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