随便几句

来源:互联网 发布:ubuntu下qq安装包下载 编辑:程序博客网 时间:2024/04/29 09:13

看见别人都些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")

问题解决了 哈哈 。。。。

原创粉丝点击