Share via


Klasse COleSafeArray

Opmerking

De Microsoft Foundation Classes-bibliotheek (MFC) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Een klasse voor het werken met matrices van willekeurig type en dimensie.

Syntaxis

class COleSafeArray : public tagVARIANT

Leden

Openbare constructors

Naam Description
COleSafeArray::COleSafeArray Maakt een COleSafeArray object.

Openbare methoden

Naam Description
COleSafeArray::AccessData Hiermee wordt een aanwijzer naar de matrixgegevens opgehaald.
COleSafeArray::AllocData Hiermee wordt geheugen toegewezen voor de matrix.
COleSafeArray::AllocDescriptor Wijst geheugen toe voor de veilige matrixdescriptor.
COleSafeArray::Attach Geeft controle over de bestaande VARIANT matrix aan het COleSafeArray object.
COleSafeArray::Clear Hiermee worden alle gegevens in de onderliggende VARIANTgegevens vrijgemaakt.
COleSafeArray::Copy Hiermee maakt u een kopie van een bestaande matrix.
COleSafeArray::Maken Hiermee maakt u een veilige matrix.
COleSafeArray::CreateOneDim Hiermee maakt u een eendimensionaal COleSafeArray object.
COleSafeArray::D estroy Vernietigt een bestaande matrix.
COleSafeArray::D estroyData Vernietigt gegevens in een veilige matrix.
COleSafeArray::D estroyDescriptor Vernietigt een beschrijving van een veilige matrix.
COleSafeArray::D etach De VARIANT-matrix loskoppelt van het COleSafeArray object (zodat de gegevens niet worden vrijgemaakt).
COleSafeArray::GetByteArray Kopieert de inhoud van de veilige matrix naar een CByteArray.
COleSafeArray::GetDim Geeft als resultaat het aantal dimensies in de matrix.
COleSafeArray::GetElement Hiermee haalt u één element van de veilige matrix op.
COleSafeArray::GetElemSize Retourneert de grootte, in bytes, van één element in een veilige matrix.
COleSafeArray::GetLBound Retourneert de ondergrens voor elke dimensie van een veilige matrix.
COleSafeArray::GetOneDimSize Retourneert het aantal elementen in het eendimensionale COleSafeArray object.
COleSafeArray::GetUBound Retourneert de bovengrens voor elke dimensie van een veilige matrix.
COleSafeArray::Lock Hiermee wordt het aantal vergrendelingen van een matrix verhoogd en wordt een aanwijzer naar de matrixgegevens in de matrixdescriptor geplaatst.
COleSafeArray::P trOfIndex Retourneert een aanwijzer naar het geïndexeerde element.
COleSafeArray::P utElement Hiermee wijst u één element toe aan de matrix.
COleSafeArray::Redim Hiermee wijzigt u de minst significante (meest rechtse) grens van een veilige matrix.
COleSafeArray::ResizeOneDim Hiermee wijzigt u het aantal elementen in een eendimensionaal COleSafeArray object.
COleSafeArray::UnaccessData Hiermee wordt het aantal vergrendelingen van een matrix verminderd en wordt de aanwijzer ongeldig.AccessData
COleSafeArray::Unlock Hiermee wordt het aantal vergrendelingen van een matrix verkleind, zodat deze kan worden vrijgemaakt of verkleind.

Openbare operators

Naam Description
COleSafeArray::operator LPCVARIANT Hiermee opent u de onderliggende VARIANT structuur van het COleSafeArray object.
COleSafeArray::operator LPVARIANT Hiermee opent u de onderliggende VARIANT structuur van het COleSafeArray object.
COleSafeArray::operator = Hiermee kopieert u waarden naar een COleSafeArray object (SAFEARRAY, VARIANT, COleVariantof COleSafeArray matrix).
COleSafeArray::operator == Vergelijkt twee variantenmatrices (SAFEARRAY, VARIANT, COleVariantof COleSafeArray matrices).
COleSafeArray::operator << Hiermee wordt de inhoud van een COleSafeArray object uitgevoerd naar de dumpcontext.

Opmerkingen

COleSafeArray is afgeleid van de OLE-structuur VARIANT . De OLE-lidfuncties SAFEARRAY zijn beschikbaar via COleSafeArray, evenals een set lidfuncties die speciaal zijn ontworpen voor eendimensionale matrices van bytes.

Overnamehiërarchie

tagVARIANT

COleSafeArray

Requirements

Koptekst: afxdisp.h

COleSafeArray::AccessData

Hiermee wordt een aanwijzer naar de matrixgegevens opgehaald.

void AccessData(void** ppvData);

Parameterwaarden

ppvData
Een aanwijzer naar een aanwijzer naar de matrixgegevens.

Opmerkingen

Bij fout genereert de functie een CMemoryException of COleException.

Example

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

Wijst geheugen toe voor een veilige matrix.

void AllocData();

Opmerkingen

Bij fout genereert de functie een CMemoryException of COleException.

COleSafeArray::AllocDescriptor

Wijst geheugen toe voor de descriptor van een veilige matrix.

void AllocDescriptor(DWORD dwDims);

Parameterwaarden

dwDims
Aantal dimensies in de veilige matrix.

Opmerkingen

Bij fout genereert de functie een CMemoryException of COleException.

COleSafeArray::Attach

Geeft de controle over de gegevens in een bestaande VARIANT matrix aan het COleSafeArray object.

void Attach(VARIANT& varSrc);

Parameterwaarden

varSrc
Een VARIANT-object. De parameter varSrc moet de VARTYPE-VT_ARRAY hebben.

Opmerkingen

Het type bron VARIANTis ingesteld op VT_EMPTY. Met deze functie worden de huidige matrixgegevens gewist, indien van toepassing.

Example

Zie het voorbeeld voor COleSafeArray::AccessData.

COleSafeArray::Clear

Hiermee wist u de veilige matrix.

void Clear();

Opmerkingen

De functie wist een veilige matrix door het VARTYPE object in te stellen op VT_EMPTY. De huidige inhoud wordt vrijgegeven en de matrix wordt vrijgemaakt.

COleSafeArray::COleSafeArray

Maakt een COleSafeArray object.

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);

Parameterwaarden

saSrc
Een bestaand COleSafeArray object of SAFEARRAY naar het nieuwe COleSafeArray object worden gekopieerd.

vtSrc
Het VARTYPE van het nieuwe COleSafeArray object.

psaSrc
Een aanwijzer naar een SAFEARRAY te kopiëren object naar het nieuwe COleSafeArray object.

varSrc
Een bestaand VARIANT of COleVariant object dat moet worden gekopieerd naar het nieuwe COleSafeArray object.

pSrc
Een aanwijzer naar een VARIANT object dat moet worden gekopieerd naar het nieuwe COleSafeArray object.

Opmerkingen

Al deze constructors maken nieuwe COleSafeArray objecten. Als er geen parameter is, wordt er een leeg COleSafeArray object gemaakt (VT_EMPTY). Als de COleSafeArray matrix wordt gekopieerd uit een andere matrix waarvan VARTYPE impliciet bekend is (a COleSafeArray, COleVariantof VARIANT), wordt het VARTYPE van de bronmatrix behouden en hoeft u deze niet op te geven. Als de COleSafeArray waarde wordt gekopieerd uit een andere matrix waarvan VARTYPE niet bekend is (SAFEARRAY), moet het VARTYPE worden opgegeven in de vtSrc-parameter .

Bij fout genereert de functie een CMemoryException of COleException.

COleSafeArray::Copy

Hiermee maakt u een kopie van een bestaande veilige matrix.

void Copy(LPSAFEARRAY* ppsa);

Parameterwaarden

ppsa
Aanwijzer naar een locatie waar de nieuwe matrixdescriptor moet worden geretourneerd.

Opmerkingen

Bij fout genereert de functie een CMemoryException of COleException.

COleSafeArray::Maken

Hiermee worden de gegevens voor de matrix toegewezen en geïnitialiseerd.

void Create(
    VARTYPE vtSrc,
    DWORD dwDims,
    DWORD* rgElements);

void Create(
    VARTYPE vtSrc,
    DWORD dwDims,
    SAFEARRAYBOUND* rgsabounds);

Parameterwaarden

vtSrc
Het basistype van de matrix (dat wil gezegd het VARTYPE van elk element van de matrix). Het VARTYPE is beperkt tot een subset van de varianttypen. De VT_ARRAY en de vlag VT_BYREF kunnen niet worden ingesteld. VT_EMPTY en VT_NULL zijn ongeldige basistypen voor de matrix. Alle andere typen zijn legaal.

dwDims
Aantal dimensies in de matrix. Dit kan worden gewijzigd nadat de matrix is gemaakt met Redim.

rgElements
Aanwijzer naar een matrix van het aantal elementen voor elke dimensie in de matrix.

rgsabounds
Aanwijzer naar een vector van grenzen (één voor elke dimensie) die moet worden toegewezen voor de matrix.

Opmerkingen

Met deze functie worden de huidige matrixgegevens gewist, indien nodig. Bij fout genereert de functie een CMemoryException.

Example

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

Hiermee maakt u een nieuw eendimensionaal COleSafeArray object.

void CreateOneDim(
    VARTYPE vtSrc,
    DWORD dwElements,
    const void* pvSrcData = NULL,
    long nLBound = 0);

Parameterwaarden

vtSrc
Het basistype van de matrix (dat wil gezegd het VARTYPE van elk element van de matrix).

dwElements
Aantal elementen in de matrix. Dit kan worden gewijzigd nadat de matrix is gemaakt met ResizeOneDim.

pvSrcData
Wijs de gegevens aan die u naar de matrix wilt kopiëren.

nLBound
De ondergrens van de matrix.

Opmerkingen

Met de functie worden de gegevens voor de matrix toegewezen en geïnitialiseerd, waarbij de opgegeven gegevens worden gekopieerd als de aanwijzer pvSrcData niet NULL is.

Bij fout genereert de functie een CMemoryException.

Example

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

Hiermee vernietigt u een bestaande matrixdescriptor en alle gegevens in de matrix.

void Destroy();

Opmerkingen

Als objecten worden opgeslagen in de matrix, wordt elk object vrijgegeven. Bij fout genereert de functie een CMemoryException of COleException.

COleSafeArray::D estroyData

Vernietigt alle gegevens in een veilige matrix.

void DestroyData();

Opmerkingen

Als objecten worden opgeslagen in de matrix, wordt elk object vrijgegeven. Bij fout genereert de functie een CMemoryException of COleException.

COleSafeArray::D estroyDescriptor

Vernietigt een beschrijving van een veilige matrix.

void DestroyDescriptor();

Opmerkingen

Bij fout genereert de functie een CMemoryException of COleException.

COleSafeArray::D etach

De gegevens van het COleSafeArray object loskoppelenVARIANT.

VARIANT Detach();

Retourwaarde

De onderliggende VARIANT waarde in het COleSafeArray object.

Opmerkingen

Met de functie worden de gegevens in een veilige matrix losgekoppeld door het VARTYPE van het object in te stellen op VT_EMPTY. Het is de verantwoordelijkheid van de beller om de matrix vrij te maken door de Windows-functie VariantCall aan te roepen.

Bij fout genereert de functie een COleException.

Example

Zie het voorbeeld voor COleSafeArray::P utElement.

COleSafeArray::GetByteArray

Kopieert de inhoud van de veilige matrix naar een CByteArray.

void GetByteArray(CByteArray& bytes);

Parameterwaarden

bytes
Een verwijzing naar een CByteArray-object .

COleSafeArray::GetDim

Retourneert het aantal dimensies in het COleSafeArray object.

DWORD GetDim();

Retourwaarde

Het aantal dimensies in de veilige matrix.

Example

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

Hiermee haalt u één element van de veilige matrix op.

void GetElement(
    long* rgIndices,
    void* pvData);

Parameterwaarden

rgIndices
Wijs een matrix met indexen aan voor elke dimensie van de matrix.

pvData
Wijs de locatie aan om het element van de matrix te plaatsen.

Opmerkingen

Deze functie roept automatisch de vensterfuncties SafeArrayLock aan en SafeArrayUnlock voor en na het ophalen van het element. Als het gegevenselement een tekenreeks, object of variant is, kopieert de functie het element op de juiste manier. De parameter pvData moet verwijzen naar een buffer die groot genoeg is om het element te bevatten.

Bij fout genereert de functie een CMemoryException of COleException.

Example

//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

Hiermee wordt de grootte van een element in een COleSafeArray object opgehaald.

DWORD GetElemSize();

Retourwaarde

De grootte, in bytes, van de elementen van een veilige matrix.

COleSafeArray::GetLBound

Retourneert de ondergrens voor elke dimensie van een COleSafeArray object.

void GetLBound(
    DWORD dwDim,
    long* pLBound);

Parameterwaarden

dwDim
De matrixdimensie waarvoor de ondergrens moet worden berekend.

pLBound
Aanwijzer naar de locatie om de ondergrens te retourneren.

Opmerkingen

Bij fout genereert de functie een COleException.

Example

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

Retourneert het aantal elementen in het eendimensionale COleSafeArray object.

DWORD GetOneDimSize();

Retourwaarde

Het aantal elementen in de eendimensionale veilige matrix.

Example

Zie het voorbeeld voor COleSafeArray::CreateOneDim.

COleSafeArray::GetUBound

Retourneert de bovengrens voor elke dimensie van een veilige matrix.

void GetUBound(
    DWORD dwDim,
    long* pUBound);

Parameterwaarden

dwDim
De matrixdimensie waarvoor de bovengrens moet worden berekend.

pUBound
Aanwijzer naar de locatie om de bovengrens te retourneren.

Opmerkingen

Bij fout genereert de functie een COleException.

Example

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

Hiermee wordt het aantal vergrendelingen van een matrix verhoogd en wordt een aanwijzer naar de matrixgegevens in de matrixdescriptor geplaatst.

void Lock();

Opmerkingen

Bij fout wordt een COleException gegenereerd.

De aanwijzer in de matrixdescriptor is geldig totdat Unlock deze wordt aangeroepen. Aanroepen kunnen Lock worden genest. Er is een gelijk aantal aanroepen Unlock vereist.

Een matrix kan niet worden verwijderd terwijl deze is vergrendeld.

COleSafeArray::operator LPCVARIANT

Roep deze cast-operator aan om toegang te krijgen tot de onderliggende VARIANT structuur voor dit COleSafeArray object.

operator LPCVARIANT() const;

COleSafeArray::operator LPVARIANT

Roep deze cast-operator aan om toegang te krijgen tot de onderliggende VARIANT structuur voor dit COleSafeArray object.

operator LPVARIANT();

Opmerkingen

Houd er rekening mee dat het wijzigen van de waarde in de VARIANT structuur die wordt geopend door de aanwijzer die door deze functie wordt geretourneerd, de waarde van dit COleSafeArray object wijzigt.

COleSafeArray::operator =

Deze overbelaste toewijzingsoperatoren kopiëren de bronwaarde naar dit COleSafeArray object.

COleSafeArray& operator=(const COleSafeArray& saSrc);
COleSafeArray& operator=(const VARIANT& varSrc);
COleSafeArray& operator=(LPCVARIANT pSrc);
COleSafeArray& operator=(const COleVariant& varSrc);

Opmerkingen

Een korte beschrijving van elke operator volgt:

  • operator =(saSrc) Hiermee kopieert u een bestaand COleSafeArray object naar dit object.

  • operator =(varSrc) Hiermee kopieert u een bestaande VARIANT of COleVariant matrix naar dit object.

  • operator =(pSrc) Hiermee kopieert u het VARIANT matrixobject dat wordt geopend door pSrc in dit object.

COleSafeArray::operator ==

Deze operator vergelijkt twee matrices (SAFEARRAY, VARIANTof COleVariantCOleSafeArray matrices) en retourneert niet-nul als ze gelijk zijn; anders 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;

Opmerkingen

Twee matrices zijn gelijk als ze een gelijk aantal dimensies hebben, gelijke grootte in elke dimensie en gelijke elementwaarden.

COleSafeArray::operator <<

De COleSafeArray invoegoperator (<<) ondersteunt diagnostische dumping en opslag van een COleSafeArray object in een archief.

CDumpContext& AFXAPI operator<<(
    CDumpContext& dc,
    COleSafeArray& saSrc);

COleSafeArray::P trOfIndex

Retourneert een aanwijzer naar het element dat is opgegeven door de indexwaarden.

void PtrOfIndex(
    long* rgIndices,
    void** ppvData);

Parameterwaarden

rgIndices
Een matrix met indexwaarden die een element van de matrix identificeren. Alle indexen voor het element moeten worden opgegeven.

ppvData
Wijs bij retour de aanwijzer naar het element dat is geïdentificeerd door de waarden in rgIndices.

COleSafeArray::P utElement

Hiermee wijst u één element toe aan de matrix.

void PutElement(
    long* rgIndices,
    void* pvData);

Parameterwaarden

rgIndices
Wijs een matrix met indexen aan voor elke dimensie van de matrix.

pvData
Wijs de gegevens aan die aan de matrix moeten worden toegewezen. VT_DISPATCH, VT_UNKNOWN en VT_BSTR varianttypen zijn aanwijzers en vereisen geen ander indirect niveau.

Opmerkingen

Met deze functie worden automatisch de Windows-functies SafeArrayLock en SafeArrayUnlock aangeroepen voor en na het toewijzen van het element. Als het gegevenselement een tekenreeks, object of variant is, kopieert de functie het correct en als het bestaande element een tekenreeks, object of variant is, wordt het correct gewist.

Houd er rekening mee dat u meerdere vergrendelingen op een matrix kunt hebben, zodat u elementen in een matrix kunt plaatsen terwijl de matrix is vergrendeld door andere bewerkingen.

Bij fout genereert de functie een CMemoryException of COleException.

Example

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

Hiermee wijzigt u de minst significante (meest rechtse) grens van een veilige matrix.

void Redim(SAFEARRAYBOUND* psaboundNew);

Parameterwaarden

psaboundNew
Wijs een nieuwe veilige matrixgrensstructuur aan die de nieuwe matrixgrens bevat. Alleen de minst significante dimensie van een matrix kan worden gewijzigd.

Opmerkingen

Bij fout genereert de functie een COleException.

COleSafeArray::ResizeOneDim

Hiermee wijzigt u het aantal elementen in een eendimensionaal COleSafeArray object.

void ResizeOneDim(DWORD dwElements);

Parameterwaarden

dwElements
Aantal elementen in de eendimensionale veilige matrix.

Opmerkingen

Bij fout genereert de functie een COleException.

Example

Zie het voorbeeld voor COleSafeArray::CreateOneDim.

COleSafeArray::UnaccessData

Hiermee wordt het aantal vergrendelingen van een matrix verminderd en wordt de aanwijzer ongeldig.AccessData

void UnaccessData();

Opmerkingen

Bij fout genereert de functie een COleException.

Example

Zie het voorbeeld voor COleSafeArray::AccessData.

COleSafeArray::Unlock

Hiermee wordt het aantal vergrendelingen van een matrix verkleind, zodat deze kan worden vrijgemaakt of verkleind.

void Unlock();

Opmerkingen

Deze functie wordt aangeroepen nadat de toegang tot de gegevens in een matrix is voltooid. Bij fout wordt een COleException gegenereerd.

Zie ook

Hiërarchiegrafiek
COleVariant-klasse
CRecordset-klasse
CDatabase-klasse