随便几句

看见别人都些Blog,从中吸取了许多有用的东东,自己也想写点,一是可以记录一些或许有价值的东西,另一方面遇到问题也可以发出来,让网上的众多高手帮忙解决。

今天将做的系统拿到企业实施,首先是小范围的,遇到的问题也不少,设置了主机,安装了数据库,将开发的系统安装到客户端,第一个就出现了问题,还好后面的没有问题,要不然真要Game Over了,查了一下,程序在XP下运行没问题,但在2000客户机上运行就出现程序中断的问题。上网查,终于搜到相同的症状,原来是这样的:

//

现象: 在开发机器上编译如下代码: #pragma warning(push)           // Needs to be done in order to suppress warning message #pragma warning(disable:4146)   // caused by bug in ADO (MS Knowledge Base article Q253317) #import "C:/Program Files/Common Files/system/ado/msado15.dll" /   no_namespace rename("EOF","adoEOF") #pragma warning(pop) ..... _CommandPtr pCmd = NULL; HRESULT hr = pCmd.CreateInstance("ADODB.Command"); 但是在客户的一台正常的Windows2000上却发生错误: Command指针创建失败,错误号:0x80004002,错误描述:没有此接口。 ·原因: 我们的开发机器上一般都装有MDAC2.7,这可能是因为装了SQL Server,也可能是WinXP自带的。 而客户机器上只有MDAC2.5。 由于微软的ADO开发小组习惯上总把ADO的最新版本命名为默认接口,如ADO2.5时将_Command25命名为_Command。 这样当你在MDAC2.7下编译VC代码,绑定的_Command的InterfaceID可能就是_Command2.7的接口ID。而在客户的MDAC2.5环境中 ,可能不存在这个接口ID,它的_Command的接口ID还是2.5的,和你的机器上的_Command接口ID肯定不一样。 所以以VC的方式创建_CommandPtr指针,是无法创建出来的。但是由于VB并不是绑定InterfaceID,所以VB中还可以正常创建ADO接口指针。 ·解决方法: 第一种:只在MDAC2.5环境下编译,并发布到MDAC2.5以上的客户环境中,但是WindXP就没有办法了; 第二种:强迫客户环境升级MDAC; 第三种:在MDAC2.7环境下编译,但是我们只明确表示创建Command25指针,如下所示: ADODB::Command25Ptr pCmdChange  = NULL; HRESULT hResult = pCmdChange.CreateInstance(__uuidof(ADODB::Command)); 第四种:选择使用OLEDB;

///

看了上面的一砣,知道了原因,但是解决起来觉得麻烦呀!

还好,小李子找到了更好的解决办法:

将原来的#import "c:/program files/common files/system/ado/msado15.dll" no_namespace rename("EOF","adoEOF") 改成#import "c:/program files/common files/system/ado/msado20.tlb" no_namespace rename("EOF","adoEOF")

问题解决了 哈哈 。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值