分享

MIDAS.DLL 惹的祸

 quasiceo 2017-02-03

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 。





    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多