1

我正在将一个 Delphi 2 项目迁移到 RAD Studio XE2。

当我尝试编译时,我得到

[DCC 致命错误] MyUnit.pas(9): F2051 Unit JclUnitVersioning 是用不同版本的 System.Contnrs.TObjectList.Remove 编译的

在下一行:

unit MyUnit;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, DB, DBTables, TB97, ExtCtrls, Grids, DBGrids, Vcl.Mask, JvExMask,
  Vcl.DBLookup,
  JvToolEdit,  {<-- error here}
  TB97Ctls;

{...}

我尝试卸载并重新安装 RAD Studio、JCL 和 JVCL,但没有任何变化。

更新使用来自 A.Hausladen的二进制 Jedi安装程序(仅用于 Delphi 试用版)。

4

2 回答 2

2

您要么有旧的 DCU 文件需要重建或删除,要么您的项目或库路径内容不一致。(找到JclUnitVersioning.dcu不在正确 JCL 库文件夹中的文件,并将其删除。正确的库文件夹命名为jcl\lib\d7,通过jcl\lib\d16,取决于您的 delphi 版本号)

这通常意味着您的项目既可以访问包含预编译 DCU 文件的库路径(或项目搜索路径)中的目录,也可以访问某些源单元(.pas 文件),并且一个或多个依赖于其他单元的单元是在与现在不同的时间编译的,具有多个版本的公共单元。我希望我能给你画一幅画。

想象一下,你有一辆车,有人升级了引擎,把它从 V6 换成了 V8。现在,以前为您的发动机维修过的人回来并试图找到 V6 排气歧管的连接位置。它已经不在了,它被移动了。由于新发动机已冻结在当前形状(留在我这里!),您的服务技术人员只是回到您(客户)并说,“对不起,我很困惑,我不能继续,我放弃”。这大致就是此错误消息的含义。

可以通过多种方式进行清理;.pas确保 100% 从文件编译并且根本没有包含文件的库文件夹对您来说可能是一件简单的事情.dcu。当然,这并不理想,是吗,因为库路径的全部目的是包含 DCU 文件的预编译“库”。

因此,我建议您进行清理(删除所有 DCU 文件)并从源代码重建所有组件包(您确实有一个批处理文件用于此目的吗?),然后查看项目的搜索路径和库路径看到它们都只包含您认为它们应该包含的文件夹。

于 2012-04-10T14:23:27.317 回答
1

刚刚在 Delphi 2010 和 XE3 上遇到了同样的问题(迁移时都在同一台 PC 上)。

在重新编译我的项目和 JCL 项目(我的 PC 上的安装程序 bat 文件错误)几个小时后,发现问题是在 tools/options/Delphi Options/libraries 中声明目录的顺序。

将它们全部取出,添加特定于版本的目录(例如 lib\D14、lib\D17\Win32),然后添加所需的其他 JCL 子目录(即一次一个,直到构建使用 JCL 的项目)

于 2013-06-20T14:54:06.917 回答