此类包装 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 值。