bcb 6.0升级到xe8时,会遇到一些问题,下面我把我遇到的问题列出来,有的我也不知道答案:
1.打开bcb 6.0时,报"没有注册类"错误
我在一台笔记本上装了xe8,但没有全装,android、IOS、osx没有选择装,只要C++ x64的,装完后打开bcb 6.0工程,能打开正常;但在另一台台式电脑上,我全装了XE8,结果打开bcb 6.0时,总是报"没有注册类"错误,不管我第三插件重新安装还是把pbl及lib文件拷到XE8目录下,都不能打开,后面我把XE8卸了,重新安装,这次安装没有全装,只安装了C++的,打开bcb 6.0工程正常;
2.用XE8编译bcb 6.0时,改变最大的问题是宽字符的问题
原字符串String类型默认为UnicodeString;
系统接口很多使用w_chart*而不是chart *,这涉及AnsiString或char *转w_chart *,这里可以使用WideString, 如:AnsiString转w_chart: WideString(AnsiString).c_bstr();
3. 对系统头文件的引用有改动
如:#include <vcl>,这种会报“Unable to open include file 'vcl'”,要改成#include <vcl.h>;
4. 对界面事件函数修改
如果参数为char *的要改成System::WideChar*,如果是AnsiString 要改成 System::UnicodeString,比如:void __fastcall BntKeyPress(TObject *Sender, char &Key)要改成void __fastcall BntKeyPress(TObject *Sender, System::WideChar &Key),BntKeyPress为OnKeyPress函数;
6.出现错误“[bcc32 Error] Winapi.ShlObj.hpp(596): E2257 , expected”
是在ShlObj.hpp下面行里报错:
typedef _tagCOMPSTATEINFO TCompStateInfo;
typedef _tagIE4COMPONENT TIE4Component;
typedef _tagCOMPONENT TShComponent;
这错误应该在哪重声明了,在cpp里把ShlObj.hpp注释掉
6.对于老的delphi程序,要重新编译安装比较麻烦
i.重新建新packge工程;
ii.[dcc32 Fatal Error] ToolsAPI.pas(18): F2613 Unit 'DockForm' not found.在compiling->other options->Additional options to passs to the compiler要增加-LUDesignIDE
,参加点击打开链接
iii.对于找不到的包,可能要另外目录搜索,如:比如没有发现DesignIntf,这要把“C:\Program Files (x86)\Embarcadero\Studio\16.0\source\ToolsAPI”加进去;
iiii.修改并成功后,安装可能还不能成功,比如:can t load package package 'adortl220',这时要在关联adortl.dcp文件,方法为点击Requires->Add Refeence把这个文件加进去
7.自动转换问题
对于前置声明的子类不能自动转成基类,要强制转化;以及void *转换时要强制转化才行
8.链接的时候出现的错误
错误一:
[ilink32 Error] Error: Unresolved external 'System::__linkproc__ __fastcall LStrAsg(System::AnsiStringT<0>&, System::AnsiStringT<0>)' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\16.0\LIB\WIN32\RELEASE\VCLE.LIB|System_t_win32
[ilink32 Error] Error: Unresolved external 'System::__linkproc__ __fastcall LStrCat(System::AnsiStringT<0>&, System::AnsiStringT<0>)' referenced from C:\PROGRAM FILES (X86)\EMBARCADERO\STUDIO\16.0\LIB\WIN32\RELEASE\VCLE.LIB|System_t_win32
.......
解决方法:勾上 "Project > Options > C++Linker > Link with Delphi Runtime Library (...)"
错误二:
Unresolved external 'Vcl::Forms::Application' referenced
解决方法:去掉勾选“Project > Options >Packages->Runtime Packages->Link with runtime packages”
错误三:
[ilink32 Error] Fatal: Unable to open file 'STLPMTI.LIB'
这种问题有的说是使用到了旧的库才会链接这东西,但把依赖的库一个个去掉,还是有这个问题。后面是通过重新建一个新的工程重新把文件添加进去解决的
错误四:
[ILINK32 Error] Error: Unresolved external '__fastcall Xmldoc::NewXMLDocument(System::WideString)'
解决方法:在CBuilder2007的IDE中,菜单上的Project-->Add to project-->找到$(BCB)\lib\release\xmlrtl.lib文件,确定,编译就行了
9.有时会报系统头文件的错
比如:vcl.h打不开,以及如下错误:
[bcc32 Error] iosfwd(129): E2102 Cannot use template 'streampos' without specifying specialization parameters
解决方法:关闭重启bcb
10.后续…………