最近在换了win7 64位的系统,今天突然发现以前写的ADO连接数据库的代码编译后在windows2003下会执行到:

_ConnectionPtr.CreateInstance(__uuidof(Connection)) 时会报“不支持此接口”的错误,花了一下午时间找了N多资料,终于解决,最后整理成下文,以备后查。

错误表现

产生错误的环境:在Windows 7 Service Pack 1 (SP1) 或 Windows 2008 R2 sp-1 或安装KB9823246 补丁的机器 上使用Microsoft Visual C++编译的Microsoft ActiveX 数据对象 (ADO)应用程序,运行在低版本的操作系统上会收到以下错误消息:
错误消息 1   
REGDB_E_CLASSNOTREG (0X80040154)
错误消息 2   
E_POINTER (0X80004003)
错误消息 3   
E_NOINTERFACE (0X80004002)
错误消息 4
找不到 COM 对象强制转换的类型为接口类型的 'System.__ComObject'' ADODB。连接。此操作失败,因为接口 IID {00001550-0000-0010-8000-00AA006D2EA4} 对 COM 组件的 QueryInterface 调用失败,出现以下错误: 不支持此接口 (HRESULT 中的异常: 0x80004002 (E_NOINTERFACE))。"

示例代码:

#import " msado15.dll" no_namespace rename("EOF","EndOfFile")

int main()
{
CoInitialize(NULL);
_ConnectionPtr pConnection = NULL; pConnection.CreateInstance("ADODB.Connect");
HRESULT hr = pConnection.CreateInstance(__uuidof(Connection));
//hr == E_NOINTERFACE
if(FAILED(hr))
{
_com_error e(hr);
::MessageBox(NULL, e.ErrorMessage(), "Error", MB_OK); //不支持此接口
return 0;
}
return 0;
}

错误原因

此问题是由于一些 ADO 接口已更改在 Windows 7 SP1 中要与新实例标识符 (Iid) 相关联。较旧的 IID 接口分配给以下后缀:

_Deprecated

例如,接口 _Connection 已更新,如下所示:

  • 在 Windows 7 中,并在 Windows 的早期版本中,_Connection IID 是 00000550-0000-0010-8000-00AA006D2EA4。

  • 在 Windows 7 SP1 中,_Connection IID 00001550-0000-0010-8000-00AA006D2EA4,并且 _Connection_Deprecated 的 IID 00000550-0000-0010-8000-00AA006D2EA4。

如果您的应用程序使用早期绑定到 _Connection,应用程序二进制在编译过程中存储新的 IID。在低级别的操作系统上运行的应用程序因为 IID 不存在时,这将会导致错误。
是与平台相关的一些 ADO Api 在 ADO 2.7 及更高版本。在 64 位版本的 Windows 中,这些 ADO Api 使用 64 位数据类型 (如LONGLONG数据类型) 处理参数。但是,使用这些 Api 的应用程序仍使用的数据类型。因此,当您尝试运行宏时收到"类型不匹配"错误消息。

解决方案

1、先下载下面的文件

32位WIN7系统:Msado60_Backcompat_i386.tlb

64位WIN7系统(INTEL平台):Msado60_Backcompat_i386.tlbMsado60_Backcompat_x64.tlb

64位WIN7系统(AMD平台):Msado60_Backcompat_i386.tlbMsado60_Backcompat_ia64.tlb

2、拿32位系统示例

注册Msado60_Backcompat_i386.tlb

1、将Msado60_Backcompat_i386.tlb复制到C:\Program Files\Common Files\System\ado\目录下

2、再将C:\Windows\Microsoft.NET\Framework\v4.0.30319\regtlibv12.exe复制到C:\Program Files\Common Files\System\ado\目录下

3、运行CMD,分别输入:
    pushd C:\Program Files (x86)\Common Files\System\ado\ + 回车
    regtlibv12.exe msado60_Backcompat_i386.tlb + 回车
注意
    32位系统需要注册:Msado60_Backcompat_i386.tlb
    64位WIN7系统(INTEL平台)需要注册:    Msado60_Backcompat_i386.tlbMsado60_Backcompat_x64.tlb这2个文件;
    64位WIN7系统(AMD平台)需要注册:Msado60_Backcompat_i386.tlbMsado60_Backcompat_ia64.tlb这2个文件;

3、替换程序代码

将:#import "msado15.dll" no_namespace rename("EOF","EndOfFile")

替换为:#import "msado60_Backcompat.tlb" no_namespace rename("EOF","EndOfFile")

4、重新生成解决方案即可

参考资料:

1、http://support.microsoft.com/kb/2517589/zh-cn

2、http://blog.csdn.net/magic_andy/article/details/9225073

_ConnectionPtr.CreateInstance(__uuidof(Connection))“不支持此接口”错误解决的更多相关文章

  1. Listener refused the connection with the following error 错误解决

    原文地址 :http://blog.csdn.net/zajin/article/details/17753351 做个备份: 查询数据库当前进程的连接数: select count(*) from ...

  2. 关于使用视图进行分页时出现当前记录集不支持书签的错误解决方法及原因(asp)

    一般在使用视图进行查询时,视图中意般都关联了两个或者更多个表,一般在这种情况下才会使用视图,但是但我在使用视图来查询数据时没有问题,但是一旦在分页中使用到视图进行查询就会出现错误提示如下: ADODB ...

  3. Windows IIS注册asp 此操作系统版本不支持此选项 错误解决方法

    更新Win10,原来的IIS站点访问不了,原因是因为IIS 没有.net 4.5,使用网上的aspnet_regiis.exe -i命令,一点都不靠谱,直接提示: C:\WINDOWS\system3 ...

  4. 【转】Windows IIS注册asp 此操作系统版本不支持此选项 错误解决方法

    原文:https://blog.csdn.net/sweety820/article/details/79538973 更新Win10,原来的IIS站点访问不了,原因是因为IIS 没有.net 4.5 ...

  5. Win10-IIS注册asp 此操作系统版本不支持此选项 错误解决方法

    现象再现: 今日在Win10上面ASP.NET网站突然不能跑了, 过程再现: 根据资料提示重新注册ASPNET_IIS.exe -i 直接提示: C:\WINDOWS\system32>c:\w ...

  6. ab压测 apr_socket_recv: Connection reset by peer (104)错误解决方法

    用apache自带ab命令进行压测,报了如下错误: 原因是在ab的程序源码中对并发数有限制. 解决办法:修改apache源码support下面的ab.c源代码,然后重新编译.修改内容如下:

  7. C++ CreateInstance("ADODB.Connection");创建接口失败的解决方法

    数据库对象mssql2005sp3专业版: 一般数据引用该路径文件#import "c:\\program files\\common files\\system\\ado\\msado15 ...

  8. Windows7下出现“不支持此接口”的解决方案

    今天学校里的辅导员突然找到我说Windows 7下什么文件夹都打不开了,提示“不支持此接口”.怀疑是病毒所致,但运行杀毒软件没有结果.重启也问题依旧. 上网查了之后找到了修复方法: 在命令行中输入fo ...

  9. [Visual Studio] 未能完成操作 不支持此接口

    vs2017添加引用时提示“未能完成操作 不支持此接口”, 一般情况下的处理办法:vs2017修复.修复是指重新安装,修改是指版本更新. 如果修复后仍然存在该问题,说明vs2017安装成功后部分功能未 ...

随机推荐

  1. hdu 5671 矩阵变换

    Matrix Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Su ...

  2. MFC下的aero效果学习笔记

    最近想在MFC中用下aero 首先参考了 http://blog.csdn.net/polytechnic/article/details/5696797 中的一系列的步骤,进行了初步学习 但是对于其 ...

  3. 记“debug alipay”一事

    背景:客户支付成功,无法返回支付结果 ===================================== 查找原因,追踪代码: verified = AlipayNotify.verify(p ...

  4. 观《Terminal》之感

    读书笔记系列链接地址http://www.cnblogs.com/shoufengwei/p/5714661.html.        经人推荐,用了几天时间欣赏了这部斯皮尔伯格导演的电影<Te ...

  5. [Codeforces Round #237 (Div. 2)] A. Valera and X

    A. Valera and X time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  6. pcduino通过USB方式刷机

    最近买了块pcduino来玩,一开始也不知道怎么入手使用,就想先学着网上来刷机,可以用TF卡来刷机,也可以用U盘来刷机.由于手上只有优盘,所以采用了第二种方式.具体方法参考了网上. 本文非原创,原文来 ...

  7. 微软官方的Unity支持组件

    https://unity.codeplex.com/ http://www.nuget.org/packages/Unity.Interception/ http://www.nuget.org/p ...

  8. Linux文件夹执行权限

    在Linux中,文件有三种权限--可读,可写,可执行.目录也有三种权限--可读,可写,可执行.但是实际上他们有着不同的意义. 对于文件: 可读 :表示可以读取文件里的数据: 可写 :表示可以改变和删除 ...

  9. Mac OS X Mavericks使用手册

    基本信息 作者: 施威铭研究室 出版社:清华大学出版社 ISBN:9787302386018 上架时间:2014-12-30 出版日期:2015 年1月 开本:16 版次:1-1 所属分类: 计算机 ...

  10. ZOJ3829---模拟,贪心

    这是2014年ACM亚洲区预赛牡丹江现场赛的一道题,铜牌题,可惜当时一路WA到死... 只有乘法的后缀表达式的特点有两个:(1)数字的数量一定大于‘*’的数量(2)最后一位一定是‘*’: 数字比*多的 ...