这几天从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.
解决方案 »
- 通过‘汉字转拼音函数’将数据库中“用户名称”字段的每个汉字的拼音的首字母写到“用户拼音”字段,出现异常
- 用过DSPack的朋友请进。
- 第三方控件
- 窗体的设置,请指点!!!
- 我想在listbox选中一个条目后,在edit中显视该条目,如何实现?
- 开发Delphi的中文帮助系统,支持的请up
- 超级猛料-小弟利用冯志宏先生的原始数据库制作的第一款网络探测器,大家来试试好不好用
- 提供InstallShield资料者送300分,急用
- 在密码验证的form中,怎样才能使得在edit中输入密码后,按回车表示鼠标按了确定按钮,按ESC键关闭form
- 急!急!急!编程问题
- 想问一下delphi开发的网络通信方面的软件是怎么通信的?
- delphi中资金管理的问题
这里说的9797版本就是bbs.2ccc.com上面flyliguang精简的bds 2007 9797版,
同时还有Delphi 2007 10471最新lite版,禁用掉了并不说msbuild不好,并不是永远不用了,
而是多了一个选择,想用、不想用的时候的分别就是0和1的切换而已加载不加载那些Together package,用DelphiDistiller.exe点几下鼠标就行。
简单。