C++Builder 2009有更新C++Builder应用程序的指南吗?

6
我有一系列使用C++Builder从BCB5开始开发的Win32 VCL应用程序,想要将它们移植到ECB2009或者现在叫什么名字都可以。
我的一些应用程序使用旧的TNT/TMS Unicode组件,因此我在代码中有大量的AnsiStrings和WideStrings混合使用。新版本引入了UnicodeString以及一堆#define,改变了像c_str这样的函数的行为方式。
我希望以尽可能向后兼容的方式修改我的代码,以便在必要时仍可以在BCB2007上编译和运行(非Unicode模式)。
特别关注的领域包括:
- 将字符串传递给/从Win32 API函数 - 与TXMLDocument的Interop - 用于RS232通信等的“原始”字符串。
与其对更改进行刀叉操作,我正在寻找可以应用于简化迁移的指南,同时尽可能保持向后兼容性。
如果还没有这样的指南,也许我们可以在这里制定一些?
2个回答

4
最大的问题是与C++Builder 2009及以前版本的兼容性,Unicode差异有些,但项目配置文件也发生了变化。根据我一直关注的CodeGear论坛上的讨论,这方面选择不是很多。
我认为,如果您还没有这样做,首先要开始的地方是C++Builder 2009发布说明
最大的问题是TCHAR映射(到wchar或char);使用STL字符串类型可能会有所帮助,因为它们在两个版本之间应该没有太大的区别。这种映射在C++Builder 2007中也存在(使用tchar头文件)。

2
对于不需要明确指定 Ansi 或 Unicode 的代码,您应该尽可能使用 System::String、System::Char 和 System::PChar 类型定义。这将有助于简化许多迁移,并且它们可以在先前的版本中工作。
当向 API 函数传递 System::String 时,您必须考虑项目选项中的新“TCHAR 映射到”设置。如果您尝试在“TCHAR 映射到”设置为“wchar_t”时传递 AnsiString::c_str(),或者在“TCHAR 映射到”设置为“char”时传递 UnicodeString::c_str(),则必须执行适当的类型转换。如果您将“TCHAR 映射到”设置为“wchar_t”,则 UnicodeString::t_str() 技术上执行与 API 中 TCHAR 相同的操作,但是如果您误用 t_str()(当“TCHAR 映射到”设置为“char”时,t_str() 将 UnicodeString 的内部数据转换为 Ansi),那么它可能非常危险。
对于“原始”字符串,您可以使用新的 RawByteString 类型(尽管我不建议这样做),或者使用 TBytes(它是字节数组 - 推荐)。您不应该从一开始就使用 Ansi/Wide/UnicodeString 来处理非字符数据。大多数人过去使用 AnsiString 作为临时数据缓冲区。不要再这样做了。这特别重要,因为 AnsiString 现在具有代码页感知功能,因此您的数据可能会在您最不希望的时候转换为其他代码页。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接