我在测试 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.
PackageDes.bpl
它需要PackageRun.bpl,它被标记为“designtime only”,并包含一个名为“uMyTestDes.pas”的单元,我在其中编写了以下代码:
unit uMyTestDes;
interface
uses
Classes,
uMyTestRun;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('MyComponents', [TMyTest]);
end;
end.
这两个包的输出目录都在Library路径中(内部有bpl,dcp和dcu)。
尝试安装PackageDes.bpl(组件,安装包...,添加...),我得到以下错误:
无法加载包C:<...>\PackageDes. bpl。Impossible trovare il modulo specificato.
消息的最后一部分是在我的操作系统的语言,在英语中,它应该是类似于“找不到指定的模块”。(我的操作系统是Windows 10 Pro 64位)。
PackageDes.bpl与错误消息中显示的路径完全相同(C:<...>\PackageDes.bpl)。经过一些测试,我发现通过从uMyTestDes.pas单元中删除以下行,错误消失了:
RegisterComponents('MyComponents', [TMyTest]);
我的代码/项目/环境有问题吗?
5条答案
按热度按时间h7appiyu1#
从http://SysInternals.com运行进程监视器,并设置过滤器仅拦截 Delphi IDE进程的文件操作(工具栏最右边的按钮)(检查TaskManager中的进程名称或快捷方式属性(对于 Delphi XE 2,它是bds. exe),然后添加类似于Include / Process Name / Ends With / bds.exe 的过滤器)。
然后清除PM中的日志,切换到 Delphi 并尝试加载包,然后一旦错误弹出,切换回PM并停止捕获事件。尝试做得快,你可以,例如不要浪费你的时间关闭错误框。
现在,您可以跟踪 Delphi 加载您的软件包时的文件I/O活动(以及其他一些背景活动噪声--您加载得越快,噪声就越少)。在该跟踪中查找所有错误,并查看 Delphi 试图在何处找到哪个包。
您还可以尝试使用Microsoft Dependency步行者或类似的工具来查看您的设计时BPL是否具有所有可解析的DLL依赖关系树。就我个人而言,我通常使用虚幻/总指挥官与FileInfo插件或ntCore CFF资源管理器。
mepcadol2#
解决此问题的简单方法是向您的运行时项目添加一个构建后操作:
上面的命令将运行时文件复制到默认的IDE Bpl位置。
k2arahey3#
我也有类似的问题。在我的例子中,我在不同的 Delphi 版本BPL路径中有相同的库名称。我在上面的评论中找到了我的问题的解决方案,所以这只是一个基本的检查提醒:
5rgfhyps4#
对我来说,问题出在DProj文件中。此字段中不接受下划线:
在IDE中的“项目选项”中手动设置该字段不会有帮助。我必须将该字段设置为一个随机值(“x”),保存项目,然后再次打开项目选项,并将该字段放回$(Auto)。然后成功了。
更新:当您将该字段设置为“x”时,IDE似乎会修复
所以,如果你有BPL的问题,搜索Excluded_Packages部分并从那里删除你自己的包。
更新:
看起来打开项目选项并转到“排除的软件包”选项卡就足够了。然后只需关闭项目选项,而不做任何更改。这样就行了
神秘是内河码头的风格!
yqhsw0fo5#
尝试将
register
程序更改为uMyTestRun
单位。现在,软件包将正确安装。
问候。