半岛权威十大直营(官方)网站

C++Builder 12.2版本技巧1:处理旧 RTL

翻译|使用教程|编辑:胡欣星|2025-01-07 16:19:59.587|阅读 13 次

概述:C++Builder 12.2版本此次进行升级时,针对技术选择做出了一些决策,其中涉及到运行时库(RTL)的使用。

# 界面/图表报表/文档/IDE等千款热门软控件火热销售中 >>

处理旧版RTL是一个非常有用的技巧,适用于升级到 C++Builder / RAD Studio 12.2 的新 Windows 64 位现代 C++ 工具链的开发人员。处理遗留代码,尤其是依赖于非标准或已废弃方法的代码,通常是现代化项目的一个挑战,因此 C++Builder 团队提供了如何解决这一问题的指导,常有帮助。

C++Builder 免费试用

背景:新 RTL 与旧版 Turbo C

C++Builder 12.2版本此次进行升级时,针对技术选择做出了一些决策,其中涉及到运行时库(RTL)的使用。RTL 是提供大多数其他代码基础功能的代码库,它有两个版本:C RTL 提供标准的 C 函数(比如printf),而 C++ RTL 提供 C++ 异常处理等功能。

(除了这两个 RTL 外,还会有 STL(标准模板库),它是容器和算法的标准库,以及你自己的代码,它们都依赖于 RTL 提供的功能。你可以将 RTL 看作是应用程序所依赖的基础代码,虽然它常常被忽视。)

旧版工具链使用的是自定义的 RTL,那么是续使用这些 RTL,还是使用新的 RTL?

  • 对于 C RTL,12.2版本选择了使用 Windows 系统自带的 UCRT(Universal C Runtime)。既然这个运行时库已经存在,且是经过验证、安全并持续更新的系统组件,为什么还需要维护一个自定义的 C RTL 呢?它已经被大多数应用程序使用,所以可以直接利用它。
  • 对于 C++ RTL,12.2版本基于开源代码和自己编写的代码,构建了一个新的 C++ RTL。通过这个全新的 RTL,解决了许多旧工具链中的问题,也是新工具链中异常处理如此优秀的原因之一。在重新编写了异常处理机制,并进行了大量的测试之后,写出了这个崭新的 RTL。

但关键在于:旧的 C 和 C++ RTL 都继承自早期 Turbo C 和 Turbo C++ 产品(上世纪八九十年代的工具)。虽然这些 RTL 经历了大量的重构,但官方并没有删除旧有的类型和方法。而在那个时代,C++ 还没有标准化,官方使用了许多非标准的类型和方法(当时 C++ 还不存在标准)。这些非标准的方法在新的 RTL 中并没有出现。因此,如果你有非常老旧的代码库,可能会用到这些方法。

影响

小编并不清楚有多少代码仍然在使用这些上世纪八九十年代的非标准方法。你可能也不清楚,因为直到现在,重新编译这些代码通常不会报错,你可能从未注意到这些方法存在。

幸运的是,在实际使用中,看到遇到这种问题的情况非常少。最常见的缺失方法已经有三位开发者报告过,而且这些问题对于他们来说都很容易修复。在这么多 C++ 开发者中,只有这几个人遇到过这个问题!但如果你有老旧代码库,且担心这个问题,接下来就是你可能遇到的情况以及解决方案。

可能遇到的情况

你切换到新平台后,重新编译代码。然后,你会看到编译错误,提示某个方法找不到。

你可能会想:“奇怪,这个方法以前是可以用的。” 然后你可能会回退到旧版工具链(它们并排安装,可以方便地进行切换),验证一下:“嗯,确实能正常工作。”

这时,你可能会通过 Google 查找类似的错误信息,发现搜索结果中找到了一个类似但不完全相同的解决方案:

比如,你搜索'c++ randomize',然后找到的结果是'std::rand'。这其实就是一个提示:你正在使用的是 C++ 标准化之前的非标准方法。

解决方案

幸运的是,日常所遇到的每个案例都很容易修复。这些方法的存在是因为当时 C++ 还没有标准化,但现在 C++ 标准库提供了这些方法的标准版本。

  • randomize()用于初始化随机数生成器,但你可以将它替换为标准的std::rand()函数。例如,将random(max)改为std::rand() % max。(请根据你的代码需要,确保这样的替换是正确的。)

大部分代码在升级过程中已经去除了这些旧方法,或者开发人员发现这些替换方法非常简单。

 官方也在考虑制作一个“适配库”,帮助那些需要与旧版 RTL 兼容的开发者,但由于目前反馈数量较少,还不确定这个功能是否有必要。

这个工具链升级提供了一个现代、符合标准的开发环境,但使用旧版代码库并依赖于遗留 RTL 调用的开发者,可能会遇到这些问题。幸运的是,大多数问题都可以通过简单的代码替换来解决,而 C++Builder 团队也愿意提供支持,帮助你顺利过渡到新的工具链。

关于如何解决在迁移到新工具链时可能遇到的 RTL 兼容性问题,如果你有任何疑问或需要进一步的帮助,请联系在线客服~


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@wqylolg.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
相关产品
C++Builder

Embarcadero旗下的C++Builder是一款高性能的可视化集成开发工具,主要用于Windo

RAD Studio

RAD Studio® 是一款终极 IDE,用于在 Delphi 中快速构建引人注目的单源多平台本机

Add-in Express for Office and Delphi VCL

Add-in Express VCL 是一个可用来编写 Borland Delphi 组件对象模型(COM)插件、智能标记(Smart Tag)以及实时数据服务器(RTD Server)的可视化工具。

RAD Server

RAD Server软件是一款强大且高效的应用程序开发工具

Delphi

Delphi® 是先进的 IDE,可快速开发单源多平台高性能本机应用程序。

扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP