如何诊断;无法访问程序包信息“;delphiide中的错误

如何诊断;无法访问程序包信息“;delphiide中的错误,delphi,ide,packages,custom-component,Delphi,Ide,Packages,Custom Component,我正在开发一组相互继承的基于TFrame的组件(许多在此过程中给予我巨大帮助的人已经知道!),并且遇到了另一个与包和安装相关的小“障碍” 我基本上有以下层次结构: TFrame TBaseFRame TBaseSizeableFrame TViewerType1 TViewerType2 …和一个面板,TExtRzPanel,它继承了Raize面板,并向其添加了一些大小调整/移动功能,以及一些其他属性/功能TBaseSizeableFrame使用此组件,并将其大部分功能传递到框架本

我正在开发一组相互继承的基于TFrame的组件(许多在此过程中给予我巨大帮助的人已经知道!),并且遇到了另一个与包和安装相关的小“障碍”

我基本上有以下层次结构:

TFrame
  TBaseFRame
TBaseSizeableFrame
  TViewerType1
  TViewerType2
…和一个面板,TExtRzPanel,它继承了Raize面板,并向其添加了一些大小调整/移动功能,以及一些其他属性/功能TBaseSizeableFrame使用此组件,并将其大部分功能传递到框架本身,因此我可以直观地开发复合查看器组件。总的来说,它工作得很好

TFrame子体都已注册到选项板(请参见 对于我之前问过的相关问题)。目前,我的软件包设置如下:

  • MyPanels-包含TExtRzPanel
  • 基本帧-包含TBaseFrame和TBaseSizeableFrame
  • ViewerSet1-包含一个基于查看器框架的组件和一个非可视组件,该组件将该查看器作为对话框形式调用。(我计划在这个节目包中也有一些其他的观众)
引发我目前混乱的主要错误是:

无法访问包“MyPanels.bpl”的包信息

现在我对这件事感到头晕目眩,因为我很难记住我尝试过的内容的确切顺序和顺序,但问题似乎是从我将对话框窗体添加到ViewerSet1时开始的,它使用来自同一项目的TViewer框架,当然,它也因此使用TExtRzPanel(这是IDE抱怨的包)

基于我删除了DCP文件(我想在某个时候也删除了DCU文件),卸载了软件包,然后重新编译/重新安装了它们MyPanels->BaseFrames,并使它们都能正常工作,但在安装ViewerSet1之后,整个过程再次破裂。 我在试图解决这个问题的过程中注意到的其他错误包括:

  • 无法安装程序包C:\Documents and Settings\All Users\Documents\RAD Studio\5.0\Bpl\MyPanels.Bpl,因为它是使用不同版本的Delphi或CBuilder创建的。 是否要在下次加载项目时尝试加载此包?(注意:我只使用一个版本的Delphi—Delphi 2007构建了此包)
  • 有一次,我注意到MyPanels的包描述没有“接受”(即,它显示为文件名为Tools->component->Install Packages),这让我觉得IDE正在查找/使用的文件可能有两个版本,但我没有看到/发现这种情况
  • Delphi在启动时发出警告,指示它无法加载已安装的软件包,以及是否希望下次加载,等等
  • 无法访问程序包“MyPanels.bpl”的程序包信息(起泡、冲洗、重复)
任何和所有的帮助/指导re:如何诊断,以及任何能帮助我理解要寻找什么的概念性解释,都将不胜感激。提前谢谢。你们在这里帮了我很大的忙!谢谢。:)


稍后更新:

在把这个放在一边一段时间后,我试着删除所有DCP/DCU MyPanels文件,然后一步一步地安装这三个包。(VMWare在这里是值得的——每次成功后都会有快照,这样在出现问题时就不必从头开始)。事实证明,如果我从ViewerSet1包中删除了对话框表单,它会安装OK。如果我再添加一次表单(它的DFM没有显示出来,就像我遇到的那样),它似乎安装正常。我已经安装了所有的组件,但看起来都不正常(并且在我的虚拟机中快照了整个过程!),但我仍然不确定出了什么问题,也不知道为什么。添加该表单最初会做什么,从而导致此类错误?有什么想法吗


我认为,从长远来看,即使更好地解释/理解什么样的事情会导致“无法访问包信息”错误也会有所帮助。

好的,我肯定遗漏了一些东西。从SysUtils:

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;
在mypackage.txt文件中应该有一个名为PACKAGEINFO的资源


或者,您可以从live.sysinternals.com下载filemon.exe,设置bds过滤器并监视IDE实际试图加载的内容。很可能是您的软件包正在加载的另一个软件包,而这第二个软件包没有附加PACKAGEINFO。

不必为提出任何问题而道歉——我感谢您在这里提供的意见/想法,并将尝试这些意见。想知道您的“这是否具有仅具有bpl扩展的库的所有特征”可能与上面更新的信息有关:添加对话框表单…?好的,如果删除对话框允许安装软件包,那么问题显然不是软件包定义不正确。我仍然很想知道TDUMP向您展示了什么——在坏版本的包和不包含对话框的工作版本上。如果这是某种类型的Delphi问题,那么也许您可以尝试通过将对话框移动到它自己的单独运行时包中来解决它?TDUMP(顺便说一句,我以前没有使用过)看起来与我创建的其他(工作)BPL基本相同。这是一个相当大的文本文件。我特别想要什么?
C:\Program Files\CodeGear\RAD Studio\5.0\bin\tdump.exe mypackage.bpl>mypackage.txt