将软件代码从Delphi 7迁移升级到Delphi 10.4.1等现代化新版本的注意事项

Delphi的一个基本事实是,全世界存在使用较旧版本Delphi编写的大量应用程序软件。尤其是经典的Delphi 7,然而现在是2021年,是时候升级到Delphi 10.4.1新版本了。每天都会有人问我有关从15到20年的旧版本Delphi迁移到最新版本Delphi的问题。值得庆幸的是,Delphi使数十年来的迁移相对容易,但是,这并不意味着轻松!

本页面旨在解决最常见的陷阱,这些陷阱可能是从2009年之前的任何版本的Delphi(包括Borland版本)过渡到现代的Embarcadero Delphi版本的陷阱。

我希望此页面成为一份生动的文档,随着时间的推移我将对其进行更新以包括我发现的所有陷阱。我还将致力于为迁移过程添加提示和技巧,并提供相关文档的链接。
如果您发现其中未包含的内容,请注册并发表评论,我可能会将其集成到此页面中。

跨平台的期望。

在开始研究版本迁移的常见陷阱之前,我想花一点时间(实际上是一两个好页面)来讨论现代Delphi版本经常被误解的功能。如果您对将代码迁移到移动平台或MAC桌面没有兴趣,请继续跳到标题为“ Windows 64位迁移”的部分,我们将从那里开始。

现代新版本 Delphi能够编译代码以定位Windows 32位和64位,MAC OSX,Android和iOS。这个事实导致人们期望Delphi可以使用您的Windows应用程序,并以某种方式使其跨平台。这不是真的!如果它是真的,那将是某种真正的魔法,但事实并非如此。事实是这样:Delphi的现代版本可以为Windows,Mac OSX,Android和iOS编写应用程序。

如果您的应用程序最初是为Windows编写的,则它将使用Win32 API。如果您的应用程序是VCL应用程序,则它使用Win32 API。在Mac OSX,Android和iOS上不可用的一件事是Win32 API。看看我要去哪里?如果不进行重大代码修改,您的应用程序将无法在其他平台上运行。值得庆幸的是,虽然Delphi不会为您神奇地解决此问题,但仍有一些辅助工具可以帮助您…

跨平台应用程序是针对名为FMX的新框架编写的。(以前称为FireMonkey,FMX = FireMonkey X平台)。
FMX框架不依赖Win32 API及其控件,而是实际上使用OpenGL或DirectX打开渲染上下文,并将控件直接渲染到该API。这样,可视控件就可以跨平台。FMX框架具有Delphi随附的绝大多数VCL控件的镜像控件,例如,VCL和FMX都具有TEdit控件,它们都具有TButton控件,依此类推。

有一个名为“ Mida转换器”的工具(请参见此处),它可以打开您现有的VCL表单(.dfm文件),并对其进行修改以使用FMX版本的控件而不是VCL控件。这样,该表格就可以有效地从VCL移植到FMX,因此可以用于Windows以外的平台。但是,这种方法仍然存在一两个陷阱。Mida转换器仅是复制/替换宏工具,如果您使用的控件不是VCL的一部分(例如第三方控件),则Mida转换器无法迁移这些控件,您必须跟踪该控件的FMX版本(如果存在),或从另一个第三方供应商那里替代FMX。

这样的FMX组件供应商之一是TMS软件:https : //www.tmssoftware.com/site/tmsfmxpack.asp

跨平台的其他注意事项

从仅Windows应用程序迁移到跨平台解决方案时,除了视觉控件外,还有其他一些注意事项。首先,除Windows之外,Delphi支持的所有平台都以某种方式基于unix / linux变体,因此都基于POSIX。因此,需要考虑一些事情……

  • POSIX平台具有不同的文件系统。Android,iOS或MAC设备上没有“ C:”驱动器。如果您已将Windows路径硬编码到应用程序中,则可能需要使用条件定义来修改代码,以了解同一文件在其他平台文件系统上的位置。
  • 没有注册表。尽管某些平台提供了Windows注册表的模拟功能,但大多数平台都没有这种功能。相反,配置通常存储在特定目录中。“ / etc”目录最常用于存储配置文件,并且没有预先指定的文件格式。一个应用程序可能使用.ini文件或类似的名称/值对文件,而另一个应用程序可能使用JSON文件,而另一个应用程序可能使用XML文件。如果您的VCL应用程序依赖于注册表中的配置,则必须将其迁移到其他平台的配置目录下的文件中。如果您的VCL应用程序通过更改注册表项来修改OS或其他应用程序的行为,则您将不得不找出如何在其他平台上实现相同功能的方法。
  • 没有Kernel32。如果您正在使用Windows API的自定义调用,则必须找到替代平台的等效行为。在许多情况下,FMX类将提供答案,但是如果您的应用程序是VCL,则可能不使用这些类。
  • 并非所有TCanvas都相等。如果您的代
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值