Version: 3.0.5
Loading...
Searching...
No Matches
wxVariantDataSafeArray Class Reference

#include <wx/msw/ole/automtn.h>

+ Inheritance diagram for wxVariantDataSafeArray:

Detailed Description

This class represents a thin wrapper for Microsoft Windows SAFEARRAY type.

It is used for converting between wxVariant and OLE VARIANT with type set to VT_ARRAY, which has more than one dimension. When wxVariant stores wxVariantDataSafeArray, it returns "safearray" as its type.

wxVariantDataSafeArray does NOT manage the SAFEARRAY it points to. If you want to pass it to a wxAutomationObject as a parameter:

  1. Assign a SAFEARRAY pointer to it and store it in a wxVariant.
  2. Call the wxAutomationObject method (CallMethod(), SetProperty() or Invoke())
  3. wxAutomationObject will destroy the array after the approapriate automation call.

An example of creating a 2-dimensional SAFEARRAY containing VARIANTs and storing it in a wxVariant

SAFEARRAYBOUND bounds[2]; // 2 dimensions
wxSafeArray<VT_VARIANT> safeArray;
unsigned rowCount = 1000;
unsigned colCount = 20;
bounds[0].lLbound = 0; // elements start at 0
bounds[0].cElements = rowCount;
bounds[1].lLbound = 0; // elements start at 0
bounds[1].cElements = colCount;
if ( !safeArray.Create(bounds, 2) )
return false;
long indices[2];
for ( unsigned row = 0; row < rowCount; row++ )
{
indices[0] = row;
for ( unsigned col = 0; col < colCount; col++ )
{
indices[1] = col;
if ( !safeArray.SetElement(indices, wxString::Format("R%u C%u", row+1, col+1)) )
return false;
}
}
range.PutProperty("Value", wxVariant(new wxVariantDataSafeArray(sa.Detach())));
static wxString Format(const wxString &format,...)
This static function returns the string containing the result of calling Printf() with the passed par...
This class represents a thin wrapper for Microsoft Windows SAFEARRAY type.
Definition automtn.h:326
The wxVariant class represents a container for any type.
Definition variant.h:163

If you you received wxVariantDataSafeArray as a result of wxAutomationObject method call: (1) Get the data out of the array. (2) Destroy the array.

wxVariant result;
result = range.GetProperty("Value");
if ( result.GetType() == "safearray" )
{
wxSafeArray<VT_VARIANT> safeArray;
sa = wxStaticCastVariantData(variant.GetData(), wxVariantDataSafeArray);
if ( !safeArray.Attach(sa.GetValue() )
{
if ( !safeArray.HasArray() )
SafeArrayDestroy(sa.GetValue()); // we have to dispose the SAFEARRAY ourselves
return false;
}
// get the data from the SAFEARRAY using wxSafeArray::GetElement()
// SAFEARRAY will be disposed by safeArray's dtor
}
SAFEARRAY * GetValue() const
Returns the stored array.
wxString GetType() const
Returns the value type as a string.
Availability:  only available for the wxMSW port.
Since
2.9.5

Library:  wxCore

<>< =''>:</>&;&;< =''>\ </></>

See also
wxAutomationObject, wxVariant, wxVariantData, wxVariantDataErrorCode

Include file:

#include <wx/msw/ole/oleutils.h> 

Public Member Functions

 wxVariantDataSafeArray (SAFEARRAY *value=NULL)
 Constructor initializes the object to value.
 
SAFEARRAY * GetValue () const
 Returns the stored array.
 
void SetValue (SAFEARRAY *value)
 Set the stored array.
 
virtual bool Eq (wxVariantData &data) const
 Returns true if data is of wxVariantDataSafeArray type and contains the same SAFEARRAY* value.
 
virtual bool Write (wxString &str) const
 Fills the provided string with the textual representation of this object.
 
wxVariantDataClone () const
 Returns a copy of itself.
 
virtual wxString GetType () const
 Returns "safearray".
 
virtual bool GetAsAny (wxAny *any) const
 Converts the value of this object to wxAny.
 
- Public Member Functions inherited from wxVariantData
 wxVariantData ()
 Default constructor.
 
virtual wxVariantDataClone () const
 This function can be overridden to clone the data.
 
void DecRef ()
 Decreases reference count.
 
virtual bool Eq (wxVariantData &data) const =0
 Returns true if this object is equal to data.
 
virtual bool GetAny (wxAny *any) const
 Converts value to wxAny, if possible.
 
virtual wxString GetType () const =0
 Returns the string type of the data.
 
virtual wxClassInfoGetValueClassInfo ()
 If the data is a wxObject returns a pointer to the objects wxClassInfo structure, if the data isn't a wxObject the method returns NULL.
 
void IncRef ()
 Increases reference count.
 
virtual bool Read (istream &stream)
 Reads the data from stream.
 
virtual bool Read (wxString &string)
 Reads the data from string.
 
virtual bool Write (ostream &stream) const
 Writes the data to stream.
 
virtual bool Write (wxString &string) const
 Writes the data to string.
 

Constructor & Destructor Documentation

◆ wxVariantDataSafeArray()

wxVariantDataSafeArray::wxVariantDataSafeArray ( SAFEARRAY *  value = NULL)
explicit

Constructor initializes the object to value.

Member Function Documentation

◆ Clone()

wxVariantData * wxVariantDataSafeArray::Clone ( ) const
virtual

Returns a copy of itself.

Reimplemented from wxVariantData.

◆ Eq()

virtual bool wxVariantDataSafeArray::Eq ( wxVariantData data) const
virtual

Returns true if data is of wxVariantDataSafeArray type and contains the same SAFEARRAY* value.

Implements wxVariantData.

◆ GetAsAny()

virtual bool wxVariantDataSafeArray::GetAsAny ( wxAny any) const
virtual

Converts the value of this object to wxAny.

◆ GetType()

virtual wxString wxVariantDataSafeArray::GetType ( ) const
virtual

Returns "safearray".

Implements wxVariantData.

◆ GetValue()

SAFEARRAY * wxVariantDataSafeArray::GetValue ( ) const

Returns the stored array.

◆ SetValue()

void wxVariantDataSafeArray::SetValue ( SAFEARRAY *  value)

Set the stored array.

◆ Write()

virtual bool wxVariantDataSafeArray::Write ( wxString str) const
virtual

Fills the provided string with the textual representation of this object.

Only the address of SAFEARRAY pointer is output.

Reimplemented from wxVariantData.