MIDAS.DLL 惹的祸这两天,升级至XE4,编译好后,在本机试运行,无错。发布时,有一台电脑,总是出错,提示AV错发生在 dsanp180.bpl 中,但其他电脑不出错呀,想不出啥原因。加日志再发布,检查错误点,发现是 ClientDataSet->CreateDataSet时出错,不得其解。后来,想起可能是使用了旧版本的midas.dll,经查,果然是该问题。该电脑上 注册了旧版本的 midas.dll (其他文件夹), 这样就不会使用当前文件夹下的 midas.dll ,重新注册正确的 midas.dll , 问题解决。 一些windows版本,要注册 midas.dll , 一些不用,我也知道为什么。那些注册了旧版本midas.dll的电脑,安装新版程序时,还是 regsvr32 midas.dll 好些,避免错误,可当多个版本的程序共存于一台电脑时,还是要小心应对。 //////////////////////////////// 可以不用MIDAS.DLL,避免DLL版本陷阱,CB几年前就开始支持直接静态链接到EXE里: // 连接声明 #pragma link "Midas.lib" // 前置声明 extern "C" __stdcall DllGetDataSnapClassObject (REFCLSID rclsid, REFIID riid, void** ppv); // 在窗体生产注册MIDAS功能 void __fastcall TMain::FormCreate( TObject *Sender ) { RegisterMidasLib(DllGetDataSnapClassObject); } 经过这样处理后可以放心使用TClientDataSet组件,不需要再发布MIDAS.DLL。笑纳。 //////////////////////////////////////////////////////////////////////////////// 程序使用分包开发方式时,会有大量的BPL包,直接静态链接midas.lib到EXE里或某个BPL包里,解决不了问题,但也不愿意每个BPL包都链接midas.lib. XE4自带MIDAS.DLL全部源码,是C++源码,对于delphi来说,不大方便,对于CB用户说,应该将其重新封装成 BPL 就可以了。我没试,不知道有人试过没? /////////////////////////////////////////////////////////////////////////// 借楼主这块地说一下: XE4开发64位程序不能调试的问题解决了,NND搞半天是环境PATH变量设置有问题,RAD STUDIO安装版本太多,PATH命令输出难以识别,有没有指错或重复也很难看一眼看出来,必须同时指向..\bin和..\bin64(省略了前面的路径,大伙懂的)。 为此特地写了一个MyPath.exe(XE4下使用标准C++外加WINDOWS SDK,控制台,未使用VCL,程序果然小了很多),方便查看PATH环境变量:http://download.csdn.net/detail/boyla/5488771 //////////////////////////////////////////////////////////////////////////////////// IDE环境变量中,PATH 设定确实太不人性化。 我都是复制出来,放记事本中,校对后再粘贴上去的。 默认的PATH 应该已经包括 ..\bin和..\bin64 , 就是以前的旧版本的bin也在PATH中,让人很不放心,PATH中去掉旧版本的相关路径。在 IDE 环境中 用 override 方式重设的 PATH 则不影响全局设定,但在IDE环境下可用,这样可以多个版本和谐共存。好象和谐版的 XE3 XE4 不能共存,和谐了XE4 ,XE3 就不能用了,我只好删除了XE3 。 |
|