关于_variant_t的一些总结

该类型是对COM类型VARIANT数据的封装,方便与C/C++数据类型转换
定义在头文件<comutil.h> 实现在comsupp.lib /comsuppd.lib/comsuppw.lib/comsuppwd.lib

【关于构造赋值】
该类封装了各种基本类型构造和赋值函数,可以直接定义赋值:
_variant_t vstr = "5";
_variant_t vint = 5;
_variant_t vbl = true;

【关于取值和转换】
可以判断vt成员值,根据其准确类型取对应值:
if(vint.vt ==VT_INT)
{
    int n = v.intVal;
}
因为该类封装了基本类型转换函数,所以可以更省事儿一点:
int n = vint;

特别注意,对于字符串类型直接取成员值,在某些情况下是有问题的
string str = (char*)vstr.bstrVal

最好是借助_bstr_tl来辅助转换:
_bstr_t bstr = (_bstr_t)vstr;
string str = (char*)bstr;

或者: string str =  (char*)(_bstr_t)vstr;

另外,不管_variant_t 是何种基本类型值,都可以转为_bstr_t,进一步转为string。
同理,_variant_t 以字符串构造的数据,同样可以转为其他基本类型,前提是可转,
例如上面vstr用字符串“5”构造,那么可以直接转为int值:
int n = vstr;
这个其实在内部判断类型不匹配时,做了转换工作,相当于实现了atoi()的逻辑。
当字符串内容无法转为其他类型时,则会抛出_com_error异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值