C++ Builder(BCB)6.0开发的工程如何升级到RAD Studio 10.2以上

C++ Builder(BCB)6.0开发的工程升级到RAD Studio 10.2以上,最好新建一个工程,删除初始Unit1.cpp文件,保存项目,然后把旧工程中的文件(.cpp、.rc、.lib等,可以用工程管理器查看)一个个添加进来。注意的是,项目project.cpp文件中,第一个Application->CreateForm()的窗体为主窗体,如果因为添加旧工程中窗体cpp文件的顺序问题而使主窗体不对,只要调整一下Application->CreateForm()的语句顺序使主窗体在前。

因为新版本RAD Studio有VCL和FMX两套类库,所以VCL组件的头文件发生了变化。代码编辑器中可以切换到窗体类头文件Unit1.h,把文件开头自动包含的#include语句全部删除,然后保存文件,IDE会自动生成新的#include语句包含窗体控件所需的适应新环境的VCL头文件。

有个别的控件,增加了个别新的属性,或改变了原有个别属性的关联作用,这些个别属性的默认值会影响控件原有的表现,如果碰到这种情况,就要去找找、查查控件的这些个别/新的属性了。另外如果用到一些三方控件,有可能不兼容了,三方控件最好使用大牌的,一直在发展或者适应RAD Studio出新版的。

需要注意的是,有的项目,项目project.cpp文件并不是默认的,可能加了一些代码,需要打开看一下,复制到新项目.cpp文件中。还有,旧项目的字符串类型是AnsiString,新的是UnicodeString(比如TEdit的Text属性的类型),涉及到字符串处理的代码可能需要修改,UnicodeString中每个字符不管是中文还是英语,长度都是1(不准确,见注1)。用的API函数、C语言库函数、C++标准库的string类和流类等,以及字符和字符串类型、字符常量和字符串字面量,都要相应地改成宽字符版本。

BCB 6.0小巧,资料多,对初学者是最合适的,做项目也可用,win10下也可用,自定义安装不要装在C盘就可以了,装完激活后再重启一下。

新版本RAD Studio支持C++11以上语法,enum类型用法变了,需要:类型名::枚举名
比如:
Application->FormFactor->Orientations = TScreenOrientations() << TScreenOrientation::InvertedLandscape;

——————————
注1(来自:http://www.cppfans.com/):

UNICODE (统一码、万国码、单一码) 为世界上所有语言的文字进行统一编码,可以跨语言、跨平台进行文字处理。UNICODE 给每一个字符都规定一个唯一的整数值作为编码,每个国家的文字都在不同的数值范围,除此之外,还包含了一些图形和符号。
• UNICODE 编码的值,通常用 U+十六进位制的数值来表示,例如小写英文字母 “a” 的编码为 U+0061,汉字的 “字” 编码为 U+5B57,表情符号 “😁” 的编码为 U+1F601。
• 由于整个地球上的文字数量太大了,UNICODE 收录的文字编码达到了 3 个字节表示的范围了,用 4 个字节的长整数表示一个字符浪费空间,用 2 个字节的短整数还不够用,于是就产生了各种储存文字的编码方式。例如有些设备的字节是 7 位的,不支持 8 位的字节,那么就产生了 UTF-7,把 UNICODE 编码按照一定的规则分成 7 位一组的数据,再储存在电脑里面。而 UTF-8 是按照一定规则,分解为 8 位一组的字节,储存在电脑里面。
• 在 Windows 系统里面,通常把 UTF-16 编码称为 UNICODE,而把本地编码称为 ANSI 。

UTF-16 编码是 Windows 操作系统核心的字符编码,是 Windows 编程最常用的编码类型,
C++ Builder 使用 UnicodeString 处理 UTF-16 编码的字符串。

由于 UTF-16 采用 16 位的字符 char16_t 进行编码,UNICODE 的基本多语言平面 (BMP) 里面的字符,直接使用单个 char16_t 编码,编码值就等于 UNICODE 码值;而辅助平面里面的字符,使用一对 char16_t 进行编码,这一对 char16_t 称为代理对 (surrogate pair),这样的字符长度为 32 位,即 4 个字节。

UNICODE 编码是 3 个字节的,那么用 4 个字节的长整数储存肯定没问题,UTF-32 就是用 4 个字节的 char32_t 表示一个字符,每个字符都是 4 个字节的,数值正好等于 UNICODE 编码的值,不需要另外规定拆分和组合的规则。Linux 的宽字符 wchar_t 是这个编码的。

——————————
注2 UnicodeString用法

UnicodeString str=L"巨大中华";  
Edit1->Text=L"巨大中华"; 
ShowMessage(L"巨大中华");
Edit2->Text=str;
ShowMessage(str);

L前缀的字符串为宽字符串。无法通过强制类型转换,例如 (LPCWSTR)"helloworld",把ANSI字符串转换为宽字符串。ANSI字符串用LPCWSTR强制类型转换,内存布局是不会变的,只是对该块内存的类型解读变了。L"helloworld"是宽字符的内存布局,内存数据和字节数都不同。

C++Builder(BCB)学习群(QQ)
https://www.cnblogs.com/ustone/p/16855586.html

posted @ 2021-03-02 17:12  ustone  阅读(1112)  评论(0编辑  收藏  举报