我正在开发一组基于TFrame的组件,这些组件彼此继承(就像许多帮助我非常的人已经知道了!),并且我正在遇到另一个小问题“阻碍,“与包装和安装有关。
我基本上有以下层次结构:
TFrame
TBaseFRame
TBaseSizeableFrame
TViewerType1
TViewerType2
...以及一个面板, TExtRzPanel ,它继承自Raize面板,并添加了一些尺寸/移动功能,以及一些其他属性/功能。 TBaseSizeableFrame 使用此组件,并将其大部分功能传递给框架本身,因此我可以直观地开发复合查看器组件。总体而言,它运作良好。
TFrame后代都注册到调色板中(参见 this post我前面提过的相关问题。目前,我的软件包设置如下:
引起我目前混乱的主要错误是:
无法访问包“MyPanels.bpl”
的包信息我现在对这件事情感到头晕目眩,因为我无法记住我尝试过的确切顺序以及顺序,但是当我将对话框表单添加到ViewerSet1时,问题似乎已经开始了,使用来自同一项目的TViewer框架,当然(因此)使用TExtRzPanel(这是IDE所抱怨的软件包)。
基于this我删除了DCP文件(以及DCU文件,我想在某些时候),卸载软件包,然后重新编译/重新安装它们MyPanels - > BaseFrames,并让他们全部工作到那一点,但在安装ViewerSet1后,整个事情再次爆炸。 我在试图解决这个问题时指出的其他错误包括:
任何和所有帮助/方向重新:如何诊断,以及任何可以帮助我理解甚至寻找什么的概念性解释,大多数赞赏。提前致谢。你们这里的人们都很有帮助!谢谢。 :)
稍后更新:
稍等一下并回到它之后,我尝试删除所有DCP / DCU MyPanels文件,然后逐步安装这三个软件包。 (VMWare在这里非常重要 - 每次成功后都会快照,以便在出现问题时不必从底部重新开始)。事实证明,如果我从ViewerSet1 pakckage中删除了对话框表单,它会安装好。如果我再次添加表单(没有显示其DFM,就像我遇到 here),它似乎安装好了。我已经安装了所有组件而且看起来工作正常(并在我的VM中快照整个事情!),但我仍然不确定出了什么问题,也没有原因。什么可以添加该表单最初做了哪些会导致这些错误?任何的想法?
我认为,即使是更好地解释/理解导致“无法访问包信息”错误的内容,从长远来看也会有所帮助。
答案 0 :(得分:0)
function PackageInfoTable(Module: HMODULE): PPackageInfoHeader;
var
ResInfo: HRSRC;
Data: THandle;
begin
Result := nil;
ResInfo := FindResource(Module, 'PACKAGEINFO', RT_RCDATA);
if ResInfo <> 0 then
begin
Data := LoadResource(Module, ResInfo);
if Data <> 0 then
try
Result := LockResource(Data);
UnlockResource(Data);
finally
FreeResource(Data);
end;
end;
end;
因此,如果您收到最后一个错误,那么您的包中没有附加必要的PACKAGEINFO资源。这可能也是您第一次出错的原因(使用不同版本的Delphi创建)。
请问这个问题,但你是否通过选择File-&gt; New-&gt; Package-Delphi来创建软件包?我问,因为这具有图书馆的所有标志,只有bpl扩展。
如果您确定该软件包是以正确的方式创建的,我建议您在整个硬盘驱动器中搜索同名的DLL文件。您找到的所有bpl包都应该执行以下操作:
C:\Program Files\CodeGear\RAD Studio\5.0\bin\tdump.exe mypackage.bpl>mypackage.txt
在mypackage.txt文件中应该有一个名为PACKAGEINFO的资源。
或者,您可以从live.sysinternals.com下载filemon.exe,设置 bds 过滤器并监视IDE实际尝试加载的内容。它很可能是你的包加载的另一个包,并且第二个包没有附加PACKAGEINFO。