gpt4 book ai didi

delphi - 如何命名文件以区分VCL和FireMonkey代码

转载 作者:行者123 更新时间:2023-12-02 16:15:47 25 4
gpt4 key购买 nike

我有一个在 Delphi 7 到 10.3 上运行的 VCL 组件。我现在正在将其移植到 FMX。

为了避免维护两个代码库,我将在源代码中使用条件定义来分隔任何自定义 FMX 和 VCL 代码。当我编译组件进行分发时,脚本将输出 VCL 或 FMX 源文件。

我的问题是如何使 VCL DCU 和 FMX DCU 在同一系统上共存(对于同时拥有我的组件的 VCL 和 FMX 版本的用户),因为这两个文件夹都需要位于 Delphi 路径上。

换句话说,我的 VCL 单元被命名为:myunit1.pas、myunit2.pas 等。

以及 FMX 版本:fmx.myunit1.pas、fmx.myunit2.pas 等

(理想情况下,我会将 VCL 命名为 vcl.myunit1.pas、vcl.myunit2.pas 等。这样,组件的 VCL 版本将只能看到 vcl.-.pas 文件,而 FireMonkey 只能看到 fmx。 -.pas 文件。不幸的是我不能这样做,因为那样它就不能在旧的 Delphi 版本上工作)。

现在,当我编译 FireMonkey 应用程序时,它会尝试使用非 fmx 前缀的源文件,而不是 fmx._.pas 源文件。我需要“隐藏”vcl 源文件夹才能编译它(重新排序 Delphi 路径没有帮助)。

是否有其他方法可以让 FireMonkey 避免使用 vcl 文件?

(我担心我需要编写一个脚本来为所有文件指定一个新名称,例如 FMXmyunit1.pas 并更新所有文件中的所有引用)。

最佳答案

由于 Delphi 不提供预定义的编译器条件来区分 Firemonkey 和 VCL 框架,因此您可以将符号 $(FrameworkType) 添加到应用程序项目设置的条件定义列表中。这样可以通过使用条件编译符号 FMXVCL 来区分库中的框架。

典型用法示例:

uses
{$IFDEF FMX}
FMX.Forms,
{$ENDIF}
{$IFDEF VCL}
VCL.Forms,
{$ENDIF}

这适用于我自己的纯 VCL 和 FMX 项目的跨平台库,我可以将源文件直接集成到项目中。通过这种简单的方式,每次都会重新编译DCU。对于混合项目,$(FrameworkType) 包含应用程序的初始框架。

当您交付包裹 (bpl) 时,事情会变得更加复杂。您必须为 FMX 和 VCL 提供两个版本的 bpl。如果您还提供源代码用于调试目的,唯一的选择是完全区分 FMX 和 VCL 版本的源代码文件,只要它们具有依赖于平台的代码即可。

关于delphi - 如何命名文件以区分VCL和FireMonkey代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58112353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com