CComVariant
类
此类包装 VARIANT
类型,提供一个成员来指示存储的数据的类型。
语法
class CComVariant : public tagVARIANT
成员
公共构造函数
名称 | 描述 |
---|---|
CComVariant::CComVariant |
构造函数。 |
CComVariant::~CComVariant |
析构函数。 |
公共方法
名称 | 描述 |
---|---|
CComVariant::Attach |
将 VARIANT 附加到 CComVariant 对象。 |
CComVariant::ChangeType |
将 CComVariant 对象转换为新类型。 |
CComVariant::Clear |
清除 CComVariant 对象。 |
CComVariant::Copy |
将 VARIANT 复制到 CComVariant 对象。 |
CComVariant::CopyTo |
复制 CComVariant 对象的内容。 |
CComVariant::Detach |
从 CComVariant 对象中分离基础 VARIANT 。 |
CComVariant::GetSize |
返回 CComVariant 对象内容的大小(字节数)。 |
CComVariant::ReadFromStream |
从流中加载 VARIANT 。 |
CComVariant::SetByRef |
初始化 CComVariant 对象并将 vt 成员设置为 VT_BYREF 。 |
CComVariant::WriteToStream |
将基础 VARIANT 保存到流。 |
公共运算符
运算符 | 说明 |
---|---|
CComVariant::operator < |
指示 CComVariant 对象是否小于指定的 VARIANT 。 |
CComVariant::operator > |
指示 CComVariant 对象是否大于指定的 VARIANT 。 |
CComVariant::operator != |
指示 CComVariant 对象是否不等于指定的 VARIANT 。 |
CComVariant::operator = |
为 CComVariant 对象赋值。 |
CComVariant::operator == |
指示 CComVariant 对象是否等于指定的 VARIANT 。 |
注解
CComVariant
包装 VARIANT
和 VARIANTARG
类型,该类型由一个并集和一个成员组成,该成员指示存储在并集中的数据的类型。 VARIANT
通常在自动化中使用。
CComVariant
派生自 VARIANT
类型,因此在能够使用 VARIANT
的任何位置都可以使用它。 例如,可以使用 V_VT
宏来提取 CComVariant
的类型,或者可以像使用 vt
一样直接访问 VARIANT
成员。
继承层次结构
要求
标头:atlcomcli.h
CComVariant::Attach
安全地清除 CComVariant
对象的当前内容,将 pSrc
的内容复制到此对象中,然后将 pSrc
的变体类型设置为 VT_EMPTY
。
HRESULT Attach(VARIANT* pSrc);
参数
pSrc
[in] 指向要附加到对象的 VARIANT
。
返回值
标准 HRESULT
值。
备注
pSrc
保存的数据的所有权将转移到 CComVariant
对象。
CComVariant::CComVariant
每个构造函数通过调用 VariantInit
Win32 函数或者根据传递的参数设置对象的值和类型,来处理 CComVariant
对象的安全初始化。
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);
参数
varSrc
[in] 用于初始化 CComVariant
对象的 CComVariant
或 VARIANT
。 源变体的内容将在不经过转换的情况下复制到目标。
lpszSrc
[in] 用于初始化 CComVariant
对象的字符串。 可将零结尾的宽 (Unicode) 字符串传递给构造函数的 LPCOLESTR
版本,或将 ANSI 字符串传递给 LPCSTR
版本。 在任一情况下,该字符串都将转换为使用 SysAllocString
分配的 Unicode BSTR
。 CComVariant
对象的类型为 VT_BSTR
。
bSrc
[in] 用于初始化 CComVariant
对象的 bool
。 bool
参数在存储之前将转换为 VARIANT_BOOL
。 CComVariant
对象的类型为 VT_BOOL
。
nSrc
[in] 用于初始化 CComVariant
对象的 int
、BYTE
、short
、long
、LONGLONG
、ULONGLONG
、unsigned short
、unsigned long
或 unsigned int
。 CComVariant
对象的类型分别为 VT_I4
、VT_UI1
、VT_I2
、VT_I4
、VT_I8
、VT_UI8
、VT_UI2
、VT_UI4
或 VT_UI4
。
vtSrc
[in] 变体的类型。 当第一个参数为 int
时,有效类型为 VT_I4
和 VT_INT
。 当第一个参数为 long
时,有效类型为 VT_I4
和 VT_ERROR
。 当第一个参数为 double
时,有效类型为 VT_R8
和 VT_DATE
。 当第一个参数为 unsigned int
时,有效类型为 VT_UI4
和 VT_UINT
。
fltSrc
[in] 用于初始化 CComVariant
对象的 float
。 CComVariant
对象的类型为 VT_R4
。
dblSrc
[in] 用于初始化 CComVariant
对象的 double
。 CComVariant
对象的类型为 VT_R8
。
cySrc
[in] 用于初始化 CComVariant
对象的 CY
。 CComVariant
对象的类型为 VT_CY
。
pSrc
[in] 用于初始化 CComVariant
对象的 IDispatch
或 IUnknown
指针。 对接口指针调用 AddRef
。 CComVariant
对象的类型分别为 VT_DISPATCH
或 VT_UNKNOWN
。
或用于初始化 CComVariant
对象的 SAFERRAY
指针。 SAFEARRAY
的副本存储在 CComVariant
对象中。 CComVariant
对象的类型是 SAFEARRAY
和 VT_ARRAY
的原始类型的组合。
cSrc
[in] 用于初始化 CComVariant
对象的 char
。 CComVariant
对象的类型为 VT_I1
。
bstrSrc
[in] 用于初始化 CComVariant
对象的 BSTR
。 CComVariant
对象的类型为 VT_BSTR
。
注解
析构函数通过调用 CComVariant::Clear
来管理清理。
CComVariant::~CComVariant
析构函数。
~CComVariant() throw();
备注
此方法通过调用 CComVariant::Clear
来管理清理。
CComVariant::ChangeType
将 CComVariant
对象转换为新类型。
HRESULT ChangeType(VARTYPE vtNew, const VARIANT* pSrc = NULL);
参数
vtNew
[in] CComVariant
对象的新类型。
pSrc
[in] 指向值已转换为新类型的 VARIANT
的指针。 默认值为 NULL
,表示 CComVariant
对象已就地转换。
返回值
标准 HRESULT
值。
注解
如果你为 pSrc
传递一个值,ChangeType
将使用此 VARIANT
作为转换的源。 否则,CComVariant
对象为源。
CComVariant::Clear
通过调用 VariantClear
Win32 函数来清除 CComVariant
对象。
HRESULT Clear();
返回值
标准 HRESULT
值。
注解
析构函数自动调用 Clear
。
CComVariant::Copy
释放 CComVariant
对象,然后为其分配指定的 VARIANT
的副本。
HRESULT Copy(const VARIANT* pSrc);
参数
pSrc
[in] 指向要复制的 VARIANT
的指针。
返回值
标准 HRESULT
值。
CComVariant::CopyTo
复制 CComVariant
对象的内容。
HRESULT CopyTo(BSTR* pstrDest);
参数
pstrDest
指向接收 CComVariant
对象内容副本的 BSTR
。
返回值
标准 HRESULT
值。
备注
CComVariant
对象的类型必须是 VT_BSTR
。
CComVariant::Detach
从 CComVariant
对象分离基础 VARIANT
并将对象的类型设置为 VT_EMPTY
。
HRESULT Detach(VARIANT* pDest);
参数
pDest
[out] 返回对象的基础 VARIANT
值。
返回值
标准 HRESULT
值。
备注
pDest
引用的 VARIANT
的内容在由 CComVariant
调用对象分配值和类型之前会自动清除。
CComVariant::GetSize
对于简单固定大小的 VARIANT
,此方法将返回基础数据类型的 sizeof
值加上 sizeof(VARTYPE)
。
ULONG GetSize() const;
返回值
CComVariant
对象的当前内容大小(以字节为单位)。
备注
如果 VARIANT
包含接口指针,则 GetSize
查询 IPersistStream
或 IPersistStreamInit
。 如果成功,则返回值为 GetSizeMax
返回的值的低阶 32 位加上 sizeof(CLSID)
和 sizeof(VARTYPE)
。 如果接口指针是 NULL
,则 GetSize
返回 sizeof(CLSID)
加上 sizeof(VARTYPE)
。 如果总大小大于 ULONG_MAX
,则 GetSize
返回 sizeof(VARTYPE)
,指示出错。
在所有其他情况下,将从当前 VARIANT
强制转换 VT_BSTR
类型的临时 VARIANT
。 此 BSTR
的长度的计算方式为:字符串长度大小 + 字符串本身的长度 + NULL
字符大小 + sizeof(VARTYPE)
。 如果无法将 VARIANT
强制转换为 VT_BSTR
类型的 VARIANT
,则 GetSize
返回 sizeof(VARTYPE)
。
此方法返回的大小与成功状态下 CComVariant::WriteToStream
使用的字节数相匹配。
CComVariant::operator =
为 CComVariant
对象分配值和相应的类型。
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();
参数
varSrc
[in] 要分配到 CComVariant
对象的 CComVariant
或 VARIANT
。 源变体的内容将在不经过转换的情况下复制到目标。
bstrSrc
[in] 要分配到 CComVariant
对象的 BSTR
。 CComVariant
对象的类型为 VT_BSTR
。
lpszSrc
[in] 要分配到 CComVariant
对象的字符串。 可将零结尾的宽 (Unicode) 字符串传递给运算符的 LPCOLESTR
版本,或将 ANSI 字符串传递给 LPCSTR
版本。 在任一情况下,该字符串都将转换为使用 SysAllocString
分配的 Unicode BSTR
。 CComVariant
对象的类型为 VT_BSTR
。
bSrc
[in] 要分配到 CComVariant
对象的 bool
。 bool
参数在存储之前将转换为 VARIANT_BOOL
。 CComVariant
对象的类型为 VT_BOOL
。
nSrc
[in] 要分配到 CComVariant
对象的 int
、BYTE
、short
、long
、LONGLONG
、ULONGLONG
、unsigned short
、unsigned long
或 unsigned int
。 CComVariant
对象的类型分别为 VT_I4
、VT_UI1
、VT_I2
、VT_I4
、VT_I8
、VT_UI8
、VT_UI2
、VT_UI4
或 VT_UI4
。
fltSrc
[in] 要分配到 CComVariant
对象的 float
。 CComVariant
对象的类型为 VT_R4
。
dblSrc
[in] 要分配到 CComVariant
对象的 double
。 CComVariant
对象的类型为 VT_R8
。
cySrc
[in] 要分配到 CComVariant
对象的 CY
。 CComVariant
对象的类型为 VT_CY
。
pSrc
[in] 要分配到 CComVariant
对象的 IDispatch
或 IUnknown
指针。 对接口指针调用 AddRef
。 CComVariant
对象的类型分别为 VT_DISPATCH
或 VT_UNKNOWN
。
或者为要分配到 CComVariant
对象的 SAFEARRAY
指针。 SAFEARRAY
的副本存储在 CComVariant
对象中。 CComVariant
对象的类型是 SAFEARRAY
和 VT_ARRAY
的原始类型的组合。
cSrc
[in] 要分配到 CComVariant
对象的字符。 CComVariant
对象的类型为 VT_I1
。
CComVariant::operator ==
指示 CComVariant
对象是否等于指定的 VARIANT
。
bool operator==(const VARIANT& varSrc) const throw();
备注
如果 varSrc
的值和类型分别等于 CComVariant
对象的值和类型,则返回 TRUE
。 否则为 FALSE
。 运算符使用用户的默认区域设置来执行比较。
运算符仅比较变体类型的值。 它会比较字符串、整数和浮点数,但不比较数组或记录。
CComVariant::operator !=
指示 CComVariant
对象是否不等于指定的 VARIANT
。
bool operator!=(const VARIANT& varSrc) const throw();
备注
如果 varSrc
的值或类型分别不等于 CComVariant
对象的值或类型,则返回 TRUE
。 否则为 FALSE
。 运算符使用用户的默认区域设置来执行比较。
运算符仅比较变体类型的值。 它会比较字符串、整数和浮点数,但不比较数组或记录。
CComVariant::operator <
指示 CComVariant
对象是否小于指定的 VARIANT
。
bool operator<(const VARIANT& varSrc) const throw();
注解
如果 CComVariant
对象的值小于 varSrc
的值,则返回 TRUE
。 否则为 FALSE
。 运算符使用用户的默认区域设置来执行比较。
CComVariant::operator >
指示 CComVariant
对象是否大于指定的 VARIANT
。
bool operator>(const VARIANT& varSrc) const throw();
备注
如果 CComVariant
对象的值大于 varSrc
的值,则返回 TRUE
。 否则为 FALSE
。 运算符使用用户的默认区域设置来执行比较。
CComVariant::ReadFromStream
将基础 VARIANT
设置为指定的流中包含的 VARIANT
。
HRESULT ReadFromStream(IStream* pStream);
参数
pStream
[in] 指向包含数据的流中的 IStream
接口的指针。
返回值
标准 HRESULT
值。
备注
ReadToStream
要求事先调用 WriteToStream
。
CComVariant::SetByRef
初始化 CComVariant
对象并将 vt
成员设置为 VT_BYREF
。
template < typename T >
void SetByRef(T* pT) throw();
参数
T
VARIANT
的类型,例如 BSTR
、int
或 char
。
pT
用于初始化 CComVariant
对象的指针。
注解
SetByRef
是将 CComVariant
对象初始化为指针 pT
并将 vt
成员设置为 VT_BYREF
的函数模板。 例如:
CComVariant var;
int nData = 10;
var.SetByRef(&nData);
CComVariant::WriteToStream
将基础 VARIANT
保存到流。
HRESULT WriteToStream(IStream* pStream);
参数
pStream
[in] 指向流中 IStream
接口的指针。
返回值
标准 HRESULT
值。