_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安装成功后部分功能未 ...
随机推荐
- jQuery中Ajax事件顺序及各参数含义
Ajax会触发很多事件.有两种事件,一种是局部事件,一种是全局事件: 局部事件:通过$.ajax来调用并且分配. $.ajax({ beforeSend: function(){ // Handle ...
- akoj-1048-求某一整数序列的全排列问题
求某一整数序列的全排列问题 Time Limit:1000MS Memory Limit:65536K Total Submit:35 Accepted:16 Description 现有一整数序列 ...
- Json.Net从4.0升级到7.0带来的问题
1.由于被迫Json.Net升级,导致了我们一部分查询出来数据 2.分析原因result = JsonConvert.DeserializeObject(inputContent, JsonDataT ...
- 升级10.11后使用CocoaPod出现-bash: pod: command not found 解决办法-备
升级10.11后,运行pod命令出现: -bash: pod: command not found 解决办法: sudo gem install -n /usr/local/bin cocoapods ...
- [HDU] 2094 产生冠军(拓扑排序+map)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2094 注意每组数据处理前,map要清空. #include<cstdio> #includ ...
- sqlplus 一次奇葩问题 HTTP proxy setting has incorrect value
y@y:~$ sqlplus Error 46 initializing SQL*PlusHTTP proxy setting has incorrect valueSP2-1502: The HTT ...
- SALT-API兼HALITE测试搞定
妈XX,真的搞了近一周的空闲时间. 最后才领悟. 其实,先按HALITE的套路弄好,然后直接SALT-API就OK了..因为HALITE就是SALT-API的封闭和替代嘛. 随便参考一个URL搞定HA ...
- POJ 2653 Pick-up sticks(线段相交)
题意:给定n个木棍依次放下,要求最终判断没被覆盖的木棍是哪些. 思路:快速排斥以及跨立实验可以判断线段相交. #include<algorithm> #include<cstdio& ...
- VS2012 快捷键 VS Resharper 设置
原文 http://www.cnblogs.com/skyangell/archive/2013/03/24/2979835.html 一直用Resharper插件,最近发现Ctrl+E,C快捷见被R ...
- hidden symbol ... is referenced by DSO
在Linux上编译Qt的时候configure出来的Makefile传递给g++的参数visiblility=hidden,然后就会调用Qt库所使用的第三方库libpng库源代码函数声明添加上__at ...