ADO CreateParameter 0xC0000005 错误原因及解决方法

自己的话:

       在Win7 x64 SP1 上调试同事的ADO相关代码,每次在调用 Command对象的CreateParameter时总是会遇到0xc0000005错误。各种调试之后不得其道,由于我本身对COM和ADO的实战经验就很少,因此一时无从下手,最后么有办法在Google上跑了一圈,看到一篇遇到和我类似问题的文章,也确实解决了这个问题,转载在这里。


原文链接:http://blog.csdn.net/guqiwei/archive/2010/12/16/6079537.aspx

正文:

一个小问题却搞了我一天时间,留个记号,以后注意。

  昨天用ADO调用带参数的存储过程,其它一切都挺顺利的,到运行到: 
m_lpCommand->CreateParameter(_T("@testn"),adInteger,adParamInput,l,_variant_t(1));

时却报 0xC0000005 错误。google一下问的人还挻多的,不过没有找到解决方法。

搞了一天,无果,今天早上来接着搞,将创建参数的方式改了一下:
_ParameterPtr lpParam;
lpParam.CreateInstance(__uuidof(Parameter));
lpParam->Name = _T("@testn");
lpParam->Type = adInteger;
lpParam->Direction = adParamInput;
lpParam->Value = _variant_t(0);
lpParam->Size = 1;

运行到最后一名时报:Run-Time Check Failure #0 错误,到此有些眉目了。

查看 ADO_LONGPTR 的类型为 ADO_LONGPTR 而 ADO_LONGPTR 定义为 __int64 看

出问题了吧。

原来我的是系统是win 7 64位的版本,而我的程序是x86的函数调用出错了。

这都是因为生成msado15.tlh时用的是

#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")

而在64位系统中这将生成64位版本的msado15.tlh

所以要想编译x86版本的程序应使用以下指令

#import "C:\Program Files (x86)\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值