这几天从Delphi2006换到2007了,感觉速度有点慢。
正好过年闲来无事,就试试两者到底有什么区别。首先精减了一些ide package。
通过测试,确认dotnetcore是使用了dotnet功能组件的加载者。
dotnetreg.ideregister进程
21E87B80 53 push ebx
21E87B81 8BD8 mov ebx, eax
21E87B83 E8 CCE3F9FF call Dotnetwincontrol::RegisterDotNetWinControl
21E87B88 E8 E7E4FFFF call Embeddedmodule::RegisterDotNetEmbeddedViews
21E87B8D E8 BE11FDFF call Interopapp::RegisterAddInLoaderService
21E87B92 E8 5512FDFF call Interopapp::RegisterMSBuildSupport然后去掉了这个最重要的家伙,然后delphi就不给干活啦。不能建立工程和打开包。
为什么呢?
经ida分析调用,找到coreice100.bpl里的原因
是错在createxmlmsbprojectfile上,虽然dotnetcore是个组件,但是已经和整个开发环境息息相关了,
delphi 默认建立是msbuild支持的xml格式的项目文件。肯定要调用dotnetcore来完成,
结果引用了未建立的对象,造成ip为00000000,不过delphi 完美地捕捉并解决了错误,bcb就会down掉。
想起了一篇文件讲delphi不用msbuild的文件,
HKCU\Software\Borland\BDS\5.0\Globals Add a new string value named MSBuildDelphi为0
这个将军在9797版的bds lite 上已经加入了,我看到这个值。
刚巧这个值也是在coreide100.bpl中,通过对代码的分析,很幸运地找到另一批注册表值的检测代码!大量跟踪中的弯路就不说了。分析结果如下:
[HKEY_CURRENT_USER\Software\Borland\BDS\5.0\Globals]
"MSBuildDelphi"="0" //delphi不用msbuild编译"MSBuildCpp"="0" //bcb不用msbuild编译
"MSbuildC#"="0"
"MSBuildGroup"="0" //重点:delphi不建立msbuild项目。启动delphi,不加载dotnetcore100.bpl,一切顺利,不再ip=0000000,项目出来了,呵呵和delphi 2006 lite一样了
编译了我的几个项目,速度飞快ok~~~~~end.

解决方案 »

  1.   

    本来MSBuild是引入的最有用的一个功能,你把这个禁用了和用2006估计没什么变化了。当然Together也很好用,禁用了之后很多架构上面的东西就只能自己改代码了。
      

  2.   

    这个是按照delphi 2006 lite 的思路走的呵,算是庞大版本的另一个选择,
    这里说的9797版本就是bbs.2ccc.com上面flyliguang精简的bds 2007 9797版,
    同时还有Delphi 2007 10471最新lite版,禁用掉了并不说msbuild不好,并不是永远不用了,
    而是多了一个选择,想用、不想用的时候的分别就是0和1的切换而已加载不加载那些Together package,用DelphiDistiller.exe点几下鼠标就行。
    简单。