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 包装 VARIANTVARIANTARG 类型,该类型由一个并集和一个成员组成,该成员指示存储在并集中的数据的类型。 VARIANT 通常在自动化中使用。

CComVariant 派生自 VARIANT 类型,因此在能够使用 VARIANT 的任何位置都可以使用它。 例如,可以使用 V_VT 宏来提取 CComVariant 的类型,或者可以像使用 vt 一样直接访问 VARIANT 成员。

继承层次结构

tagVARIANT
 └ CComVariant

要求

标头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 对象的 CComVariantVARIANT。 源变体的内容将在不经过转换的情况下复制到目标。

lpszSrc
[in] 用于初始化 CComVariant 对象的字符串。 可将零结尾的宽 (Unicode) 字符串传递给构造函数的 LPCOLESTR 版本,或将 ANSI 字符串传递给 LPCSTR 版本。 在任一情况下,该字符串都将转换为使用 SysAllocString 分配的 Unicode BSTRCComVariant 对象的类型为 VT_BSTR

bSrc
[in] 用于初始化 CComVariant 对象的 boolbool 参数在存储之前将转换为 VARIANT_BOOLCComVariant 对象的类型为 VT_BOOL

nSrc
[in] 用于初始化 CComVariant 对象的 intBYTEshortlongLONGLONGULONGLONGunsigned shortunsigned longunsigned intCComVariant 对象的类型分别为 VT_I4VT_UI1VT_I2VT_I4VT_I8VT_UI8VT_UI2VT_UI4VT_UI4

vtSrc
[in] 变体的类型。 当第一个参数为 int 时,有效类型为 VT_I4VT_INT。 当第一个参数为 long 时,有效类型为 VT_I4VT_ERROR。 当第一个参数为 double 时,有效类型为 VT_R8VT_DATE。 当第一个参数为 unsigned int 时,有效类型为 VT_UI4VT_UINT

fltSrc
[in] 用于初始化 CComVariant 对象的 floatCComVariant 对象的类型为 VT_R4

dblSrc
[in] 用于初始化 CComVariant 对象的 doubleCComVariant 对象的类型为 VT_R8

cySrc
[in] 用于初始化 CComVariant 对象的 CYCComVariant 对象的类型为 VT_CY

pSrc
[in] 用于初始化 CComVariant 对象的 IDispatchIUnknown 指针。 对接口指针调用 AddRefCComVariant 对象的类型分别为 VT_DISPATCHVT_UNKNOWN

或用于初始化 CComVariant 对象的 SAFERRAY 指针。 SAFEARRAY 的副本存储在 CComVariant 对象中。 CComVariant 对象的类型是 SAFEARRAYVT_ARRAY 的原始类型的组合。

cSrc
[in] 用于初始化 CComVariant 对象的 charCComVariant 对象的类型为 VT_I1

bstrSrc
[in] 用于初始化 CComVariant 对象的 BSTRCComVariant 对象的类型为 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 查询 IPersistStreamIPersistStreamInit。 如果成功,则返回值为 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 对象的 CComVariantVARIANT。 源变体的内容将在不经过转换的情况下复制到目标。

bstrSrc
[in] 要分配到 CComVariant 对象的 BSTRCComVariant 对象的类型为 VT_BSTR

lpszSrc
[in] 要分配到 CComVariant 对象的字符串。 可将零结尾的宽 (Unicode) 字符串传递给运算符的 LPCOLESTR 版本,或将 ANSI 字符串传递给 LPCSTR 版本。 在任一情况下,该字符串都将转换为使用 SysAllocString 分配的 Unicode BSTRCComVariant 对象的类型为 VT_BSTR

bSrc
[in] 要分配到 CComVariant 对象的 boolbool 参数在存储之前将转换为 VARIANT_BOOLCComVariant 对象的类型为 VT_BOOL

nSrc
[in] 要分配到 CComVariant 对象的 intBYTEshortlongLONGLONGULONGLONGunsigned shortunsigned longunsigned intCComVariant 对象的类型分别为 VT_I4VT_UI1VT_I2VT_I4VT_I8VT_UI8VT_UI2VT_UI4VT_UI4

fltSrc
[in] 要分配到 CComVariant 对象的 floatCComVariant 对象的类型为 VT_R4

dblSrc
[in] 要分配到 CComVariant 对象的 doubleCComVariant 对象的类型为 VT_R8

cySrc
[in] 要分配到 CComVariant 对象的 CYCComVariant 对象的类型为 VT_CY

pSrc
[in] 要分配到 CComVariant 对象的 IDispatchIUnknown 指针。 对接口指针调用 AddRefCComVariant 对象的类型分别为 VT_DISPATCHVT_UNKNOWN

或者为要分配到 CComVariant 对象的 SAFEARRAY 指针。 SAFEARRAY 的副本存储在 CComVariant 对象中。 CComVariant 对象的类型是 SAFEARRAYVT_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 的类型,例如 BSTRintchar

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 值。

另请参阅

类概述