在Win7或2008(安装了 KB983246补丁)上编译的ADO应用程序,不能运行在XP,2003等低级别的操作系统的解决方案
来源:互联网 发布:腾讯软件管家官方 编辑:程序博客网 时间:2024/05/12 13:45
错误表现:
产生错误的场景如下:重新运行 Windows 7 Service Pack 1 (SP1) 或 Windows 2008 R2 sp-1 或具有 KB9823246 安装在计算机上编译 Microsoft ActiveX 数据对象 (ADO) 应用程序使用下列应用程序之一:
Microsoft Visual C++
Microsoft Visual Basic for Applications (VBA)
Microsoft Visual Basic 6
Microsoft.NET 应用程序
在这种情况下,您发现该应用程序不会在低级别的操作系统上运行。例如,它不会运行 Windows 7 的发行版、 Windows Vista 和其他 Windows 的早期版本。这取决于您的实现,您还收到类似于下列内容之一的错误消息。(您可能收到其他错误消息。)
错误消息 1
REGDB_E_CLASSNOTREG (0X80040154)
错误消息 2
E_POINTER (0X80004003)
错误消息 3
E_NOINTERFACE (0X80004002)
4 的错误消息
找不到 COM 对象强制转换的类型为接口类型 System.__ComObject ' ADODB。连接。此操作失败,因为对 COM 组件的接口 IID {00001550-0000-0010-8000-00AA006D2EA4} QueryInterface 调用失败,出现以下错误: 不支持此接口 (HRESULT 中的异常: 0x80004002 (E_NOINTERFACE))。"
下面的 Visual C++ 代码段复制此问题。
#import " msado15.dll" no_namespace rename("EOF","EndOfFile")
int main()
{
CoInitialize(NULL);
_ConnectionPtr pConnection = NULL;
HRESULT hr = pConnection.CreateInstance(__uuidof(Connection)); //hr gets E_NOINTERFACE here
}
下面的 Visual Basic for Applications 代码段复制此问题。
Private Sub Form_Load()
Dim Conn As New ADODB.Connection ‘Runtime error here: Class does not support Automation or does not support expected interface
End Sub
VBA 错误: 运行时错误"430": 类不支持自动化或不支持所需的接口
注意Microsoft 不再对 ADO 支持的主互操作程序集,并不再支持 Visual Basic 6。有关 Visual Basic 6 可支持性的详细信息,请访问下面的 MSDN 网页:
在 Windows Vista、 Windows Server 2008 和 Windows 7 的 Visual Basic 6.0 支持语句
ADO 支持性的主互操作程序集的更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
318559有关 ADO (ADODB) Visual Studio.NET 中使用的主互操作程序集
原因:
因为有些 ADO 接口更改与新实例标识符 (Iid) 相关联的 Windows 7 SP1 中,将出现此问题。较旧的 IID 接口分配给以下后缀:
- 在 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。
是与平台相关的一些 ADO Api 在 ADO 中 2.7 及更高版本。在 64 位版本的 Windows,这些 ADO Api 使用 64 位数据类型 (如LONGLONG数据类型) 来处理参数。但是,使用这些 Api 的应用程序仍使用长数据类型。因此,当您尝试运行该宏时收到一条"类型不匹配"错误消息。
解决方案:
下载msado60_Backcompat_i386.tlb,将原来程序中的类似于下面的代码:
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")\
rename("LockTypeEnum","adoLockTypeEnum")\
rename("FieldAttributeEnum","adoFieldAtttributeEnum")\
rename("EditModeEnum","adoEditModeEnum")\
rename("RecordStatusEnum","adoRecordStatusEnum")\
rename("ParameterDirectionEnum","adoParameterDirectionEnum")\
rename("DataTypeEnum","adoDataTypeEnum")
替换成:
#import "msado60_Backcompat_i386.tlb" no_namespace rename("EOF","adoEOF")\
rename("LockTypeEnum","adoLockTypeEnum")\
rename("FieldAttributeEnum","adoFieldAtttributeEnum")\
rename("EditModeEnum","adoEditModeEnum")\
rename("RecordStatusEnum","adoRecordStatusEnum")\
rename("ParameterDirectionEnum","adoParameterDirectionEnum")\
rename("DataTypeEnum","adoDataTypeEnum")
重新编译成功即可!
参考文献:
1.在Windows 7 SP 1 或 Windows Server 2008 R2 SP 1 或者安装了 KB983246补丁的机子上编译的ADO应用程序,不能运行在低级别的操作系统
2.A Better solution for the Windows 7 SP1 ADO GUID changes
3.An ADO-based application that is compiled in Windows 7 SP1 or in Windows Server 2008 R2 SP1 does not run in earlier versions of Windows
完成!
- 在Win7或2008(安装了 KB983246补丁)上编译的ADO应用程序,不能运行在XP,2003等低级别的操作系统的解决方案
- 在Win7或2008(安装了 KB983246补丁)上编译的ADO应用程序,不能运行在XP,2003等低级别的操作系统的解决方案
- 在Win7或2008(安装了 KB983246补丁)上编译的ADO应用程序,不能运行在XP,2003等低级别的操作系统的解决方案 .
- 为什么在Win7上编译的ADO程序不能在XP上运行
- ADO 应用程序不能在运行级别较低的操作系统上运行的解决方案
- ADO 应用程序不能在运行级别较低的操作系统上运行的解决方案
- VS2012编译的C/C++程序不能在Windows XP上运行的解决方案
- 解决WIN7-64,VS2008编译的MFC程序在WIN7-32/XP上不能运行的问题
- xp或2003下无法运行win7所编译的ado程序.
- VC连接ADO方式ACCESS数据库在WIN7下编译到XP下不能运行解决方法
- VC连接ADO方式数据库在WIN7下编译到XP下不能运行解决方法
- VC连接ADO方式ACCESS数据库在WIN7下编译到XP下不能运行解决方法
- VC连接ADO方式ACCESS数据库在WIN7下编译到XP下不能运行
- VC连接ADO方式ACCESS数据库在WIN7下编译到XP下不能运行解决方法
- VC连接ADO方式ACCESS数据库在WIN7下编译到XP下不能运行解决方法
- VS2010编译的程序在XP上无运行库执行,以及ADO在XP上报80004003的错误处理
- win7、vs2010、Ribbon写的wpf程序在xp的机器上不能运行
- vs2010 MFC +win7下的程序 在win7上正常运行,XP就出错(ADO数据库连接出错)
- 使用 MediaMetadataRetriever类获取视频缩略图
- 这题递归用绝了
- 一道算法题:求和为某正整数的所有正整数集合
- POJ 3094 Quicksum
- 延缓变量扩展
- 在Win7或2008(安装了 KB983246补丁)上编译的ADO应用程序,不能运行在XP,2003等低级别的操作系统的解决方案
- java异常信息完整性的控制
- Emgu.CV OpenCV 学习之路(二)
- AJAX 从零学起
- 头文件不宜定义变量原因解析
- 创建文件之文件描述符
- IOS-获取Model(设备型号)、Version(设备版本号)、app(程序版本号)等
- 真爱是用你的一生去守护他(她),不离不弃!
- iOS6下无法调用设备转向方法的原因及解决方案