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

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

    昨天用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")

 

另外事参考:

http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/07f08a41-cba9-4bd3-a704-d6c1302eefd4/

 

你可能感兴趣的:(c,Google,存储,X86)