試用 BCB2010 遇到的問題
勉励前行 2009-11-07 11:55:51 今天試著將一些控件安裝到 BCB2010 上,將遇到的問題整理一下貼上來分享 ,同時也希望其他使用 2010 的朋友,將問題或竅門貼上來,大家一起學習使用2010。
1、多項目同組時的 BuildAll, 會過早地檢查包依賴,產生多余的提示。
在多個項目的組中 BuildAll 時,會先檢查全部項目其需要包含的包及靜態庫,如果缺少,則提示,然後才逐一編譯。
而在B2007中,則是逐一編譯,編譯到該項目時才檢查。
如果同一項目組中存在包依賴問題。B2010的方式則會在一開始就提示缺少包或庫。B2007則不會。
2、編譯PAS文件時,delphi link 如果選擇 Generate all C++ Builder files (including package libs) 則會產生link error: 找不到 obj file
除非你先用其他方式(如Generate C++ .objs, headers, namespaces, export)生成obj file。
選擇 Generate all C++ Builder files 然後 執行 clear 再 build 就會出現 link error
所以,如果想生成LIB靜態庫,必須要先生成 obj 然後重新編譯生成 lib , 要不厭其煩地 編譯兩次才行 。
3、鏈接時出現了一個致命錯誤。(編譯 QRDesign1.59 時出現)
Exception EAccessViolation: Access violation at address 50010ABE in module 'rtl140.bpl'. Read of address FFFFFFFF
[MSBuild Error] The "ILINK32" task failed unexpectedly.
System.Runtime.InteropServices.COMException (0x8000FFFF): 災難性的失敗 (Exception from HRESULT: 0x8000FFFF (E_UNEXPECTED))
at Borland.Build.Tasks.Cpp.IBCBuildHostObject.ILinkAliasVFSFile(String fileName, String& tempFilename)
at Borland.Build.Tasks.Cpp.ILINK32.GetCommandLine()
at Borland.Build.Tasks.Common.BaseTask.GenerateCommandLineCommands()
at Microsoft.Build.Utilities.ToolTask.Execute()
at Borland.Build.Tasks.Common.BaseTask.Execute()
at Borland.Build.Tasks.Cpp.ILINK32.Execute()
at Microsoft.Build.BuildEngine.TaskEngine.ExecuteTask(ExecutionMode howToExecuteTask, Hashtable projectItemsAvailableToTask, BuildPropertyGroup projectPropertiesAvailableToTask, Boolean& taskClassWasFound)
4、編譯pascal代碼的速度是比不上 B2007 + bcc32pch2.79 的。
我試過可以在BCB中編譯安裝的第三方控件:Ehlib5, QuickReport5.04.1,TeeChart8.06 VirtualTree4.86 vclskin5
未通過的:QRDesign1.59(未拿到 for 2010 版的,我拿 for 2007 版的改,因為鏈接出現致命錯誤就沒繼續了。)
decisioncube源碼有2010版本的,要正版用戶才能下載:http://cc.embarcadero.com/Item/27351
以前測試存在的問題:
1、奇怪的IDE:第一次能選上,以後就不行了。
试着用 放一个 RibbonCombox 到 Ribbon 上, 第一次,可以用鼠标选中TActionClients[0] , 焦点转移后无法用鼠标选中。只能通过ActionManager逐级选择这个东西来修改RibbonCombox的"Caption" , 有点怪怪的,为什么第一次可以,焦点转移后就不行了。 编译,试执行,一切正常。。。。。
2、項目中莫需有的 LIB 及 BPI 文件未清除。
将界面是的全部控件清除,存盘。发现没有将对应的头文件去除,依然#include那些不需要的头文件。 这好象问题不大。继续測试,编译一个不带包独立运行的版本,还是正常。 可是当我手工将这些多余的头文件清除后,问题出现了:
[ILINK32 Error] Error: Unresolved external 'LresultFromObject' referenced from C:\PROGRAM FILES\EMBARCADERO\RAD STUDIO\7.0\LIB\DEBUG\VCLACTNBAND.LIB|ActnMenus
如果编译的是带包运行的版本,则链接正常,否则链接错误。要知道清除所有控件后,这是一个空Form啊。
BCB2010 还是与以前的版本一样,残留控件信息,在项目文件中错误地链接莫需有的LIB及库。而且Options中不提供对应修改方法。当然解决方法是手工编辑 .cbproj 项目文件,将莫需有的 LIB 及 BPI 文件去除。这样就能正常编译连接了。这个问题在所有BCB版本中都一直存在,非要关闭当前项目并手工编辑项目文件不可。
3、IDE不能识别事件函數中的名字空间。(以前的版本也有这个问题)
将Button1的事件函数void __fastcall TForm1::Button1Click(TObject *Sender) {/**/}
更改为void __fastcall TForm1::Button1Click(System::TObject *Sender) {/**/}
保存,IDE依然不能正确识别名字空间对类型的影响,System::TObject 与 TObject 是同一类型,但IDE就是只认 TObject 不认 System::TObject 这对安装多个第三方控件的使用者来说,可能造成麻烦。因为当出现类型同名时,只有加上名字空间都能正确区分不同的类型。好象还好,还允许你不移除这个事件的关联,只是每次保存都被提问,很烦人。当然编译与连接均是正常,只是IDE在保存时老是提问你。
版本: Embarcadero® C++Builder® 2010 Version 14.0.3513.24210 不敢裝UP1 .
(注明:以上測試是在 BCB2010 中編譯安裝 delphi 控件,不是在 delphi 2010 中編譯安裝。)