VARIANT辅助函数
VariantChangeType
VariantInit
VariantCopy
VariantCopyInd
VariantClear
1 if (varOp1.vt == VT_BSTR && varOp2.vt == VT_BSTR) 2 { 3 VariantInit(pvarResult); 4 ComBSTR bstr(varOp1.bstrVal); 5 bstr.append(varOp2.bstrVal); 6 7 pvarResult->vt = VT_BSTR; 8 pvarResult->bstrVal = bstr.Copy(); 9 return S_OK; 10 }
1. VARIANT数据类型不是简单的基本内置类型,比如:int char long等,这就意味着VARIANT是通过struct定义的,在C++中struct具备和class几乎同等的功能,也可以这么来讲,VARIANT也是一个类,在它的定义中有以下语句:
typedef struct tagVARIANT VARIANT;
而CComVARIANT的定义是:
class CComVariant : public tagVARIANT
这就意味着CComVariant类是VARIANT的子类,在参数传递的过程中,如果要求传入的是某个类的指针类型,那么这个类指针或者这个类的继承链中的任何一个子类的指针传入进去后都是合法的。那么,这就说所要要求传入VARIANT * 数据类型的地方都可以用CComVariant * 的类型来代替!
据此,我们可以得出一个结论,在ATL中,CComVariant完全可以取代VARIANT,而且更加方便可靠!