升级到VC 2008之后变体类型问题

从VC6或者VC2003(VC7.1)升级到VC2008(VC9.0)之后,很多的程序不能编译了,很多能编译的运行的不对了。
比如:
过去的ADO数据库访问一切正常,到了2008里虽然可以编译,但是取出的整数值都是0,跟踪发现,代码中的一段:
    _variant_t aa = GetValueByField(strFName);
   
    if( aa.vt == VT_NULL )
        return 0;
   
    return aa.intVal;

aa的值正确,但是aa.intVal的值是0,咨询同事后得知这里应该写为
   
    return int(aa);
 

修改后在2008也正常了。可能变体类型的定义在2008里发生了变化,所以过去那种比较猛的直接访问数据成员的方法失效了。

还比如一个COM组件的调用程序,过去一直正常,2008里不能编译了,出错在
[ module(DLL, name="Fst", uuid="{2726C85B-BF30-4b4b-8529-289D3E05CE4B}") ];
修改为
[ module(type=dll, name="DllFst", uuid="{2726C85B-BF30-4b4b-8529-289D3E05CE4B}") ];
即可编译通过,这里是因为2008里的写法要求更严格了。

还有类似的错误:
__hook(&IFstEvents::OnRegChange, pSource, OnRegChange);
需要修改为:
__hook(&IFstEvents::OnRegChange, pSource, &CMsg::OnRegChange);
类成员函数需要加上类名和取地址符(是编译器告诉我要这样写的)。

还好,多数程序最终还是通过了编译,希望他们也能正确的运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值