调用COM控件的时候(例如访问数据库)出现类型不匹配。

2 篇文章 0 订阅

COM规范中,所有的变量类型对于C语言来说只有一种:VARIANT。

如果我们想从数据库里面取出一个long类型的值,或者说COM控件需要返回给我一个值,都要通过VARIANT完成。

例如
CComQIPtr<Recordset> spRS;
VARIANT va;//这个用来取出受到影响的记录数量。
spRS->Execute("SELECT * FROM aTable", //执行这个sql语句
    &va,//这个参数用来返回受到影响的记录数量
    adCmdText);//这个参数用来说明是执行一个sql字串
    ....//剩下的省略了 懒

看上去好像没有什么问题,不过程序一般都会挂掉,如果加上try的话就可以知道是类型不匹配……
问题在什么地方?第二个参数按照要求给VARIANT的引用没有问题啊……就算懒一点,把va的类型变成_variant_t……很遗憾的说,程序还是很一般的挂了……

问题在于va的类型,度于一个VARIANT类型的东西来说,必须指出这个VARIANT的对象到底表示什么类型的,例如,这里返回一个long类型,就要在使用va之前指定va是一个VT_I4,最终呢,程序就变成这个样子:

CComQIPtr<Recordset> spRS;
VARIANT va;//这个用来取出受到影响的记录数量。
va.vt=VT_I4;  //这个样子就好鸟
spRS->Execute("SELECT * FROM aTable", //执行这个sql语句
    &va,//这个参数用来返回受到影响的记录数量
    adCmdText);//这个参数用来说明是执行一个sql字串
    ....//剩下的省略了 懒

 

以上内容针对VC6 (没有sp)。
在vs.net 2005中 _variant_t 的功能得到了加强。不过不知道是否能直接使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值