CComVariant
class
This class wraps the VARIANT
type, providing a member indicating the type of data stored.
Syntax
class CComVariant : public tagVARIANT
Members
Public constructors
Name | Description |
---|---|
CComVariant::CComVariant |
The constructor. |
CComVariant::~CComVariant |
The destructor. |
Public methods
Name | Description |
---|---|
CComVariant::Attach |
Attaches a VARIANT to the CComVariant object. |
CComVariant::ChangeType |
Converts the CComVariant object to a new type. |
CComVariant::Clear |
Clears the CComVariant object. |
CComVariant::Copy |
Copies a VARIANT to the CComVariant object. |
CComVariant::CopyTo |
Copies the contents of the CComVariant object. |
CComVariant::Detach |
Detaches the underlying VARIANT from the CComVariant object. |
CComVariant::GetSize |
Returns the size in number of bytes of the contents of the CComVariant object. |
CComVariant::ReadFromStream |
Loads a VARIANT from a stream. |
CComVariant::SetByRef |
Initializes the CComVariant object and sets the vt member to VT_BYREF . |
CComVariant::WriteToStream |
Saves the underlying VARIANT to a stream. |
Public operators
Operator | Description |
---|---|
CComVariant::operator < |
Indicates whether the CComVariant object is less than the specified VARIANT . |
CComVariant::operator > |
Indicates whether the CComVariant object is greater than the specified VARIANT . |
CComVariant::operator != |
Indicates whether the CComVariant object doesn't equal the specified VARIANT . |
CComVariant::operator = |
Assigns a value to the CComVariant object. |
CComVariant::operator == |
Indicates whether the CComVariant object equals the specified VARIANT . |
Remarks
CComVariant
wraps the VARIANT
and VARIANTARG
type, which consists of a union and a member indicating the type of the data stored in the union. VARIANT
s are typically used in Automation.
CComVariant
derives from the VARIANT
type so it can be used wherever a VARIANT
can be used. You can, for example, use the V_VT
macro to extract the type of a CComVariant
or you can access the vt
member directly just as you can with a VARIANT
.
Inheritance hierarchy
Requirements
Header: atlcomcli.h
CComVariant::Attach
Safely clears the current contents of the CComVariant
object, copies the contents of pSrc
into this object, then sets the variant type of pSrc
to VT_EMPTY
.
HRESULT Attach(VARIANT* pSrc);
Parameters
pSrc
[in] Points to the VARIANT
to be attached to the object.
Return value
A standard HRESULT
value.
Remarks
Ownership of the data held by pSrc
is transferred to the CComVariant
object.
CComVariant::CComVariant
Each constructor handles the safe initialization of the CComVariant
object by calling the VariantInit
Win32 function or by setting the object's value and type according to the parameters passed.
CComVariant() throw();
CComVariant(const CComVariant& varSrc);
CComVariant(const VARIANT& varSrc);
CComVariant(LPCOLESTR lpszSrc);
CComVariant(LPCSTR lpszSrc);
CComVariant(bool bSrc);
CComVariant(BYTE nSrc) throw();
CComVariant(int nSrc, VARTYPE vtSrc = VT_I4) throw();
CComVariant(unsigned int nSrc, VARTYPE vtSrc = VT_UI4) throw();
CComVariant(shor nSrc) throw();
CComVariant(unsigned short nSrc) throw();
CComVariant(long nSrc, VARTYPE vtSrc = VT_I4) throw();
CComVariant(unsigned long nSrc) throw();
CComVariant(LONGLONG nSrc) throw();
CComVariant(ULONGLONG nSrc) throw();
CComVariant(float fltSrc) throw();
CComVariant(double dblSrc, VARTYPE vtSrc = VT_R8) throw();
CComVariant(CY cySrc) throw();
CComVariant(IDispatch* pSrc) throw();
CComVariant(IUnknown* pSrc) throw();
CComVariant(const SAFEARRAY* pSrc);
CComVariant(char cSrc) throw();
CComVariant(const CComBSTR& bstrSrc);
Parameters
varSrc
[in] The CComVariant
or VARIANT
used to initialize the CComVariant
object. The contents of the source variant are copied to the destination without conversion.
lpszSrc
[in] The character string used to initialize the CComVariant
object. You can pass a zero-terminated wide (Unicode) character string to the LPCOLESTR
version of the constructor or an ANSI string to the LPCSTR
version. In either case, the string is converted to a Unicode BSTR
allocated using SysAllocString
. The type of the CComVariant
object is VT_BSTR
.
bSrc
[in] The bool
used to initialize the CComVariant
object. The bool
argument is converted to a VARIANT_BOOL
before being stored. The type of the CComVariant
object is VT_BOOL
.
nSrc
[in] The int
, BYTE
, short
, long
, LONGLONG
, ULONGLONG
, unsigned short
, unsigned long
, or unsigned int
used to initialize the CComVariant
object. The type of the CComVariant
object is VT_I4
, VT_UI1
, VT_I2
, VT_I4
, VT_I8
, VT_UI8
, VT_UI2
, VT_UI4
, or VT_UI4
, respectively.
vtSrc
[in] The type of the variant. When the first parameter is int
, valid types are VT_I4
and VT_INT
. When the first parameter is long
, valid types are VT_I4
and VT_ERROR
. When the first parameter is double
, valid types are VT_R8
and VT_DATE
. When the first parameter is unsigned int
, valid types are VT_UI4
and VT_UINT
.
fltSrc
[in] The float
used to initialize the CComVariant
object. The type of the CComVariant
object is VT_R4
.
dblSrc
[in] The double
used to initialize the CComVariant
object. The type of the CComVariant
object is VT_R8
.
cySrc
[in] The CY
used to initialize the CComVariant
object. The type of the CComVariant
object is VT_CY
.
pSrc
[in] The IDispatch
or IUnknown
pointer used to initialize the CComVariant
object. AddRef
is called on the interface pointer. The type of the CComVariant
object is VT_DISPATCH
or VT_UNKNOWN
, respectively.
Or, the SAFERRAY
pointer used to initialize the CComVariant
object. A copy of the SAFEARRAY
is stored in the CComVariant
object. The type of the CComVariant
object is a combination of the original type of the SAFEARRAY
and VT_ARRAY
.
cSrc
[in] The char
used to initialize the CComVariant
object. The type of the CComVariant
object is VT_I1
.
bstrSrc
[in] The BSTR
used to initialize the CComVariant
object. The type of the CComVariant
object is VT_BSTR
.
Remarks
The destructor manages cleanup by calling CComVariant::Clear
.
CComVariant::~CComVariant
The destructor.
~CComVariant() throw();
Remarks
This method manages cleanup by calling CComVariant::Clear
.
CComVariant::ChangeType
Converts the CComVariant
object to a new type.
HRESULT ChangeType(VARTYPE vtNew, const VARIANT* pSrc = NULL);
Parameters
vtNew
[in] The new type for the CComVariant
object.
pSrc
[in] A pointer to the VARIANT
whose value is converted to the new type. The default value is NULL
, meaning the CComVariant
object is converted in place.
Return value
A standard HRESULT
value.
Remarks
If you pass a value for pSrc
, ChangeType
will use this VARIANT
as the source for the conversion. Otherwise, the CComVariant
object is the source.
CComVariant::Clear
Clears the CComVariant
object by calling the VariantClear
Win32 function.
HRESULT Clear();
Return value
A standard HRESULT
value.
Remarks
The destructor automatically calls Clear
.
CComVariant::Copy
Frees the CComVariant
object and then assigns it a copy of the specified VARIANT
.
HRESULT Copy(const VARIANT* pSrc);
Parameters
pSrc
[in] A pointer to the VARIANT
to be copied.
Return value
A standard HRESULT
value.
CComVariant::CopyTo
Copies the contents of the CComVariant
object.
HRESULT CopyTo(BSTR* pstrDest);
Parameters
pstrDest
Points to a BSTR
that will receive a copy of the contents of the CComVariant
object.
Return value
A standard HRESULT
value.
Remarks
The CComVariant
object must be of type VT_BSTR
.
CComVariant::Detach
Detaches the underlying VARIANT
from the CComVariant
object and sets the object's type to VT_EMPTY
.
HRESULT Detach(VARIANT* pDest);
Parameters
pDest
[out] Returns the underlying VARIANT
value of the object.
Return value
A standard HRESULT
value.
Remarks
The contents of the VARIANT
referenced by pDest
are automatically cleared before being assigned the value and type of the calling CComVariant
object.
CComVariant::GetSize
For simple-fixed size VARIANT
s, this method returns the sizeof
value for the underlying data type plus sizeof(VARTYPE)
.
ULONG GetSize() const;
Return value
The size in bytes of the current contents of the CComVariant
object.
Remarks
If the VARIANT
contains an interface pointer, GetSize
queries for IPersistStream
or IPersistStreamInit
. If successful, the return value is the low-order 32 bits of the value returned by GetSizeMax
plus sizeof(CLSID)
and sizeof(VARTYPE)
. If the interface pointer is NULL
, GetSize
returns sizeof(CLSID)
plus sizeof(VARTYPE)
. If the total size is larger than ULONG_MAX
, GetSize
returns sizeof(VARTYPE)
, which indicates an error.
In all other cases, a temporary VARIANT
of type VT_BSTR
is coerced from the current VARIANT
. The length of this BSTR
is calculated as the size of the length of the string plus the length of the string itself plus the size of the NULL
character plus sizeof(VARTYPE)
. If the VARIANT
can't be coerced to a VARIANT
of type VT_BSTR
, GetSize
returns sizeof(VARTYPE)
.
The size returned by this method matches the number of bytes used by CComVariant::WriteToStream
under successful conditions.
CComVariant::operator =
Assigns a value and corresponding type to the CComVariant
object.
CComVariant& operator=(const CComVariant& varSrc);
CComVariant& operator=(const VARIANT& varSrc);
CComVariant& operator=(const CComBSTR& bstrSrc);
CComVariant& operator=(LPCOLESTR lpszSrc);
CComVariant& operator=(LPCSTR lpszSrc);
CComVariant& operator=(bool bSrc);
CComVariant& operator=(BYTE nSrc) throw();
CComVariant& operator=int nSrc) throw();
CComVariant& operator=(unsigned int nSrc) throw();
CComVariant& operator=(short nSrc) throw();
CComVariant& operator=(unsigned short nSrc) throw();
CComVariant& operator=(long nSrc) throw();
CComVariant& operator=(unsigned long nSrc) throw();
CComVariant& operator=(LONGLONG nSrc) throw();
CComVariant& operator=(ULONGLONG nSrc) throw();
CComVariant& operator=(float fltSrc) throw();
CComVariant& operator=(double dblSrc) throw();
CComVariant& operator=(CY cySrc) throw();
CComVariant& operator=(IDispatch* pSrc) throw();
CComVariant& operator=(IUnknown* pSrc) throw();
CComVariant& operator=(const SAFEARRAY* pSrc);
CComVariant& operator=(char cSrc) throw();
Parameters
varSrc
[in] The CComVariant
or VARIANT
to be assigned to the CComVariant
object. The contents of the source variant are copied to the destination without conversion.
bstrSrc
[in] The BSTR
to be assigned to the CComVariant
object. The type of the CComVariant
object is VT_BSTR
.
lpszSrc
[in] The character string to be assigned to the CComVariant
object. You can pass a zero-terminated wide (Unicode) character string to the LPCOLESTR
version of the operator or an ANSI string to the LPCSTR
version. In either case, the string is converted to a Unicode BSTR
allocated using SysAllocString
. The type of the CComVariant
object is VT_BSTR
.
bSrc
[in] The bool
to be assigned to the CComVariant
object. The bool
argument is converted to a VARIANT_BOOL
before being stored. The type of the CComVariant
object is VT_BOOL
.
nSrc
[in] The int
, BYTE
, short
, long
, LONGLONG
, ULONGLONG
, unsigned short
, unsigned long
, or unsigned int
to be assigned to the CComVariant
object. The type of the CComVariant
object is VT_I4
, VT_UI1
, VT_I2
, VT_I4
, VT_I8
, VT_UI8
, VT_UI2
, VT_UI4
, or VT_UI4
, respectively.
fltSrc
[in] The float
to be assigned to the CComVariant
object. The type of the CComVariant
object is VT_R4
.
dblSrc
[in] The double
to be assigned to the CComVariant
object. The type of the CComVariant
object is VT_R8
.
cySrc
[in] The CY
to be assigned to the CComVariant
object. The type of the CComVariant
object is VT_CY
.
pSrc
[in] The IDispatch
or IUnknown
pointer to be assigned to the CComVariant
object. AddRef
is called on the interface pointer. The type of the CComVariant
object is VT_DISPATCH
or VT_UNKNOWN
, respectively.
Or, a SAFEARRAY
pointer to be assigned to the CComVariant
object. A copy of the SAFEARRAY
is stored in the CComVariant
object. The type of the CComVariant
object is a combination of the original type of the SAFEARRAY
and VT_ARRAY
.
cSrc
[in] The char to be assigned to the CComVariant
object. The type of the CComVariant
object is VT_I1
.
CComVariant::operator ==
Indicates whether the CComVariant
object equals the specified VARIANT
.
bool operator==(const VARIANT& varSrc) const throw();
Remarks
Returns TRUE
if the value and type of varSrc
are equal to the value and type, respectively, of the CComVariant
object. Otherwise, FALSE
. The operator uses the user's default locale to perform the comparison.
The operator compares only the value of the variant types. It compares strings, integers, and floating points, but not arrays or records.
CComVariant::operator !=
Indicates whether the CComVariant
object doesn't equal the specified VARIANT
.
bool operator!=(const VARIANT& varSrc) const throw();
Remarks
Returns TRUE
if either the value or type of varSrc
isn't equal to the value or type, respectively, of the CComVariant
object. Otherwise, FALSE
. The operator uses the user's default locale to perform the comparison.
The operator compares only the value of the variant types. It compares strings, integers, and floating points, but not arrays or records.
CComVariant::operator <
Indicates whether the CComVariant
object is less than the specified VARIANT
.
bool operator<(const VARIANT& varSrc) const throw();
Remarks
Returns TRUE
if the value of the CComVariant
object is less than the value of varSrc
. Otherwise, FALSE
. The operator uses the user's default locale to perform the comparison.
CComVariant::operator >
Indicates whether the CComVariant
object is greater than the specified VARIANT
.
bool operator>(const VARIANT& varSrc) const throw();
Remarks
Returns TRUE
if the value of the CComVariant
object is greater than the value of varSrc
. Otherwise, FALSE
. The operator uses the user's default locale to perform the comparison.
CComVariant::ReadFromStream
Sets the underlying VARIANT
to the VARIANT
contained in the specified stream.
HRESULT ReadFromStream(IStream* pStream);
Parameters
pStream
[in] A pointer to the IStream
interface on the stream containing the data.
Return value
A standard HRESULT
value.
Remarks
ReadToStream
requires a previous call to WriteToStream
.
CComVariant::SetByRef
Initializes the CComVariant
object and sets the vt
member to VT_BYREF
.
template < typename T >
void SetByRef(T* pT) throw();
Parameters
T
The type of VARIANT
, for example, BSTR
, int
, or char
.
pT
The pointer used to initialize the CComVariant
object.
Remarks
SetByRef
is a function template that initializes the CComVariant
object to the pointer pT
and sets the vt
member to VT_BYREF
. For example:
CComVariant var;
int nData = 10;
var.SetByRef(&nData);
CComVariant::WriteToStream
Saves the underlying VARIANT
to a stream.
HRESULT WriteToStream(IStream* pStream);
Parameters
pStream
[in] A pointer to the IStream
interface on a stream.
Return value
A standard HRESULT
value.