安装程序包时无法加载程序包%s错误

Fab*_*zio 4 ide delphi bpl package

我正在测试Delphi 2007,我的groupproject由2个包组成.

在此输入图像描述

PackageRun.bpl

它被标记为"仅运行时",并包含一个名为"uMyTestRun.pas"的单元,其中定义了一个空的TFrame后代:

unit uMyTestRun;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
  Dialogs;

type
  TMyTest = class(TFrame)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

implementation

{$R *.dfm}

end.
Run Code Online (Sandbox Code Playgroud)

PackageDes.bpl

它需要PackageRun.bpl,它被标记为"仅设计时间"并包含一个名为"uMyTestDes.pas"的单元,其中我编写了以下代码:

unit uMyTestDes;

interface

uses
  Classes,
  uMyTestRun;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MyComponents', [TMyTest]);
end;

end.
Run Code Online (Sandbox Code Playgroud)

两个包的输出目录都在库路径中(里面有bpl,dcp和dcu).


尝试安装PackageDes.bpl(组件,安装包...,添加...),我收到以下错误:

无法加载包C:\ <...>\PackageDes.bpl.Impossibile trovare il modulo specificato.

消息的最后部分是用我的操作系统的语言,用英语说它应该是"找不到指定的模块".(我的操作系统是Windows 10 Pro 64位).

PackageDes.bpl与错误消息(C:\ <...>\PackageDes.bpl)中显示的路径完全相同.经过一些测试,我发现从uMyTestDes.pas单元中删除以下行后错误消失了:

RegisterComponents('MyComponents', [TMyTest]);
Run Code Online (Sandbox Code Playgroud)

我的代码/项目/环境有什么问题吗?

Ari*_*The 9

http://SysInternals.com运行Process Monitor 并设置过滤器以仅拦截Delphi IDE进程的文件操作(最右边的工具栏按钮)(检查TaskManager中的进程名称或快捷方式属性(对于Delphi XE2,它是bds.exe) ,然后添加类似于Include/Process Name/Ends With/bds.exe的过滤器.

然后清除PM中的登录,切换到Delphi并尝试加载包,然后一旦出现错误,切换回PM并停止捕获事件.尽可能快地尝试,例如不要浪费时间关闭错误框.

现在您将获得Delphi的文件I/O活动的痕迹,加载您的包(以及一些其他背景活动噪音 - 您执行的噪音越快,噪音越小).在该跟踪中查找所有错误,并查看Delphi尝试查找的位置和包.

如果您的Design-Time BPL具有可解析的所有DLL依赖性树,您还可以尝试使用Microsoft Dependency Walker或类似工具.我个人通常使用Unreal/Total commander和FileInfo插件或ntCore CFF Explorer.