【问题标题】:Verify that the version of a file is correct before Compiling在编译之前验证文件的版本是否正确
【发布时间】:2019-11-06 13:18:02
【问题描述】:

Delphi 自己的 LIB 文件已根据特定需要进行了更改。由于我们有几个程序员,我需要确保每个人都有这个变化,并且在未来也是如此。

由于 Delphi 库已安装且没有版本控制,我需要验证它的版本是否正确。

我想在编译版本之前这样做。

我能够做的是创建文件的哈希值,以确保它没有被修改

{$IF  getMD5('C:\Delphi7\Lib\arquivo.dcu') = 'B1C1CBE80477S09AC4C1B39C28FE9619'}
    {$Message Fatal 'Version of file .dcu file in Delphi7 Lib is wrong..}
{$IFEND}

那样不行,因为每一刻都返回[Fatal Error]的消息

有什么想法吗?

【问题讨论】:

  • 不能在条件中调用函数。
  • 知道如何验证这一点吗?
  • 谢谢@KenWhite
  • 把修改后的文件放到你的项目中,或者它的搜索路径中,就不需要修改安装了。你不应该这样做。我的问题是,您如何确定项目的源代码是正确的版本?您使用修订控制。这个修改也是你项目的一部分,所以不应该用同样的方式处理吗?
  • 是的,你已经说过了。当我这样做时,我不会修改 Delphi 安装,但我确保我修改的文件链接到可执行文件。对我来说,这样做似乎更加强大。它对我来说根本不可能出错,因为修改是项目修订控制的一部分。

标签: delphi delphi-7 conditional-compilation


【解决方案1】:

我的 Delphi 时间很久以前了,但我使用 C++ 的方法是向项目所依赖的库添加一个唯一符号。然后,如果缺少符号(即未使用您的 lib 版本),您至少会收到链接时间错误。

这看起来如何(不确定这在 Delphi 中是否可行)? 除了您对 LIB 的修改之外,您还添加了一个名为“MyModificationSentinelABCDEF()”的函数,该函数为空(名称并不重要,只需确保它是唯一的)。然后,不是您建议的 $IF 语句,而是添加对该函数的调用和一个描述性注释,以解释它为什么存在以及如果出现与之相关的错误必须做什么。

如果缺少该函数,您应该会看到编译/链接错误。

【讨论】:

  • 在 Delphi 中,这需要对修改后的单元进行interface 更改,这在修改 RTL/VCL/FMX 的单元然后将它们包含到您的项目中时是不允许的。您的工作必须重新编译整个 RTL/VCL/FMX 本身,这并非易事
  • 嗯... - 这很不幸 :-) 我将修改我的答案以强调这种方法似乎不可行。 - 感谢您的提示
  • @RemyLebeau 恐怕建议不准确。你不能在接口部分修改现有的声明,但你可以声明新的常量、变量、类型等。我已经回复了答案,因为原来的版本很好。
  • @DavidHeffernan 你确定吗?我的理解是,对interface 部分的任何 修改都会增加DCU 中的嵌入式版本号,这会导致单元中出现“单元X 使用不同版本的单元Y 编译”错误针对原始未修改单元编译
  • @Remy 是的,我确定。我今天早上在写评论之前再次进行了测试,实际上我在自己的项目中使用了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多