代码跟进去,发现CreateInstance返回值是空的。
找了下原因:
首先,环境如下:
开发机:win7 msado15.dll的版本:6.1.7601.17514
测试机1:xp msado15.dll的版本:2.81.3007.0
测试机2:xp msado15.dll的版本:2.81.3012.0
开发时用
#import "c:\program files\common files\system\ado\msado15.dll" no_namespace rename("EOF","adoEOF")
引入ado,在 测试机1 上连接不上数据库,提示未知错误。在 测试机2 上可以正常连接数据库。
可以确定是ado版本的问题。
我用#import "msado15.dll" no_namespace rename("EOF","adoEOF") 引入ado,将 2.81.3007.0 版本的 ado拷贝到工程下面,编译出的可执行程序在 测试机1 和测试机2上都能正常运行。又试了一个win2000系统,具体的ado版本忘了,比2.81.3007.0早,也能正常运行。如果将2.81.3012.0版本的ado拷贝到工程目录下,则在测试机2能正常运行,测试机1上不能正常运行。
目前就只能用#import "msado15.dll" no_namespace rename("EOF","adoEOF") 引入ado,然后将 2.81.3007.0 版本的ado拷贝到工程目录下面了,至少这样做可执行程序都能正常运行。
不清楚微软是怎么维护的,可能中间某个版本突然不兼容了。