无法加载包 DCP_d5.bpl

Can't loadpackage DCP_d5.bpl

我正在将旧版 Delphi 5 应用程序升级到 Delphi XE7。此应用程序基于许多遗留包,其中之一是 DCPcrypt 1.3。 DCPcrypt 是有问题的:它在 Delphi XE7 IDE 的运行之间被神秘地卸载了,如果不手动清理注册表我就无法重新安装。重新启动 Delphi XE7 IDE 时给出的错误消息是 "Can't load package DCP_d5.bpl. The specified module can't be found. Do you want to attempt to load this package the next time a project is loaded?",如果我尝试重新安装它,其后是 "Package \DCP_d5.bpl can't be installed because another package with the same base name is already loaded (DCP_d5.bpl)"。

有问题的 DCPcrypt 版本与 1999 年 3 月 23 日的描述捆绑在一起。

Delphi 包系统是否已更改,留下 DCPcrypt 并导致这些错误?如果是这样,任何人都可以建议需要更新什么吗?

显然必须先卸载依赖给定包的所有包,然后卸载、重建并重新安装有问题的包,然后重建并重新安装依赖包。有时 Delphi 必须在卸载和重新安装之间关闭。

关于软件包名称,Delphi 惯例是不在软件包名称中包含 Delphi 版本,而是添加 Delphi 版本(在本例中为 210 Delphi XE7) 到配置中的 LIBSUFFIX。 BPL 的名称中将包含 Delphi 版本,但引用模块可以仅指定包名称,并且将在构建时匹配正确的 BPL。

在这种情况下,我创建了一个新的XE7包项目,命名为DPCcrypt,并设置'210'的LIBSUFFIX来表示Delphi XE7。我还向项目添加了一个 DCPcrypt.rc 资源文件,其中包含一个名为 DCPCRYPT 的图标,以便为包提供一个图标。最后,我在 DCPcrypt.pas 中为 VER280 添加了一个条件编译块,以将 DWORD 类型定义设置为 longword,因为默认值为 longint(遗留的 Delphi 的旧版本没有 32 -位无符号整数),并且消除了编译时的数百条有符号与无符号警告消息。

现在可以加载和安装 DCPcrypt 项目。 (它的包名称是 DCPcrypt,但它的 BPL 名称是 DCPcrypt210。)无论什么问题挂起它的负载现在都消失了。