_ConnectionPtr.CreateInstance(__uuidof(Connection))“不支持此接口”错误解决
最近在换了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.tlb 和Msado60_Backcompat_x64.tlb
64位WIN7系统(AMD平台):Msado60_Backcompat_i386.tlb 和Msado60_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.tlb和Msado60_Backcompat_x64.tlb这2个文件;
64位WIN7系统(AMD平台)需要注册:Msado60_Backcompat_i386.tlb和Msado60_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))“不支持此接口”错误解决的更多相关文章
- Listener refused the connection with the following error 错误解决
原文地址 :http://blog.csdn.net/zajin/article/details/17753351 做个备份: 查询数据库当前进程的连接数: select count(*) from ...
- 关于使用视图进行分页时出现当前记录集不支持书签的错误解决方法及原因(asp)
一般在使用视图进行查询时,视图中意般都关联了两个或者更多个表,一般在这种情况下才会使用视图,但是但我在使用视图来查询数据时没有问题,但是一旦在分页中使用到视图进行查询就会出现错误提示如下: ADODB ...
- Windows IIS注册asp 此操作系统版本不支持此选项 错误解决方法
更新Win10,原来的IIS站点访问不了,原因是因为IIS 没有.net 4.5,使用网上的aspnet_regiis.exe -i命令,一点都不靠谱,直接提示: C:\WINDOWS\system3 ...
- 【转】Windows IIS注册asp 此操作系统版本不支持此选项 错误解决方法
原文:https://blog.csdn.net/sweety820/article/details/79538973 更新Win10,原来的IIS站点访问不了,原因是因为IIS 没有.net 4.5 ...
- Win10-IIS注册asp 此操作系统版本不支持此选项 错误解决方法
现象再现: 今日在Win10上面ASP.NET网站突然不能跑了, 过程再现: 根据资料提示重新注册ASPNET_IIS.exe -i 直接提示: C:\WINDOWS\system32>c:\w ...
- ab压测 apr_socket_recv: Connection reset by peer (104)错误解决方法
用apache自带ab命令进行压测,报了如下错误: 原因是在ab的程序源码中对并发数有限制. 解决办法:修改apache源码support下面的ab.c源代码,然后重新编译.修改内容如下:
- C++ CreateInstance("ADODB.Connection");创建接口失败的解决方法
数据库对象mssql2005sp3专业版: 一般数据引用该路径文件#import "c:\\program files\\common files\\system\\ado\\msado15 ...
- Windows7下出现“不支持此接口”的解决方案
今天学校里的辅导员突然找到我说Windows 7下什么文件夹都打不开了,提示“不支持此接口”.怀疑是病毒所致,但运行杀毒软件没有结果.重启也问题依旧. 上网查了之后找到了修复方法: 在命令行中输入fo ...
- [Visual Studio] 未能完成操作 不支持此接口
vs2017添加引用时提示“未能完成操作 不支持此接口”, 一般情况下的处理办法:vs2017修复.修复是指重新安装,修改是指版本更新. 如果修复后仍然存在该问题,说明vs2017安装成功后部分功能未 ...
随机推荐
- CODEVS 3138 栈练习2
3138 栈练习2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description (此题与栈练习1相比改了2处:1加强了数据 2不保证栈空时 ...
- Linux-统一事件源
概念: 信号时一种异步事件:信号处理函数和程序的主循环式两条不同的执行路线,信号处理函数需要尽可能快地执行完毕,以确保该信号不被屏蔽.(为了避免一些竞态条件,信号在处理期间,系统不会再次出发它)太久. ...
- dedecms likearticle 调用附加表的字段调用方式
[field:id runphp='yes'] $aid = @me; $row = $GLOBALS['dsql']->GetOne("Select 字段名 From `dede_a ...
- js拖拽进度条
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm4.aspx. ...
- [spoj104][Highways] (生成树计数+矩阵树定理+高斯消元)
In some countries building highways takes a lot of time... Maybe that's because there are many possi ...
- Google Chrome源码剖析【序】
[序(本人什么都没做,完全转载)] 开源是口好东西,它让这个充斥着大量工业垃圾代码和教材玩具代码的行业,多了一些艺术气息和美的潜质.它使得每个人,无论你来自米国纽约还是中国铁岭,都有机会站在巨人的肩膀 ...
- JVM virtual memory
This has been a long-standing complaint with Java, but it's largely meaningless, and usually based o ...
- 有关 sizeof和strlen的总结
先看看sizeof() 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是 ...
- 《Programming WPF》翻译 第8章 1.动画基础
原文:<Programming WPF>翻译 第8章 1.动画基础 动画包括在一段时间内改变用户界面的某些可见的特征,如它的大小.位置或颜色.你可以做到这一点,非常困难的通过创建一个tim ...
- leetcode_question_114 Flatten Binary Tree to Linked List
Given a binary tree, flatten it to a linked list in-place. For example, Given 1 / \ 2 5 / \ \ 3 4 6 ...