0

私は、相互に継承する一連の TFrame ベースのコンポーネントを開発しています (途中で私を大いに助けてくれた多くの人がすでに知っているように!)、パッケージとインストールに関連するさらに別の小さな「障害」に遭遇しています。

基本的に次の階層があります。

TFrame
  TBaseFRame
TBaseSizeableFrame
  TViewerType1
  TViewerType2

...そしてパネルTExtRzPanelは、Raize パネルから継承し、いくつかのサイズ変更/移動機能を追加し、他のいくつかのプロパティ/機能も備えています。TBaseSizeableFrameはこのコンポーネントを使用し、その機能の多くをフレーム自体に渡します。そのため、Viewer の複合コンポーネントを視覚的に開発できます。全体的にうまく機能します。

TFrame の子孫はすべてパレットに登録されています ( 関連する質問については、この投稿を参照してください)。現在、次のようにパッケージを設定しています。

  • MyPanels - TExtRzPanel を含む
  • BaseFrames - TBaseFrame と TBaseSizeableFrame を含む
  • ViewerSet1 - 1 つの Viewer フレームベース コンポーネントと、その Viewer をダイアログ フォームとして呼び出す非ビジュアル コンポーネントが含まれます。(このパッケージには、他のいくつかのビューアーも含める予定です)。

私の現在の混乱を引き起こした主なエラーは次のとおりです。

パッケージ 'MyPanels.bpl' のパッケージ情報にアクセスできません

私が試したことの正確なシーケンスとその順序を思い出すのに苦労しているので、私はこのことで十分にめまいがしていますが、TViewerを使用するViewerSet1にダイアログフォームを追加したときに問題が始まったようです同じプロジェクトのフレームであり、(もちろん) TExtRzPanel (IDE が不満を言っているパッケージ) を使用します。

これに基づいて、DCPファイル(およびDCUファイルもある時点であると思います)を削除し、パッケージをアンインストールしてから、MyPanels-> BaseFramesを再コンパイル/再インストールし、その時点まですべてが機能するようにしましたが、インストール時にViewerSet1 全体が再び吹き飛ばされます。これを理解しようとする途中で気付いたその他のエラーには、次のものがあります。

  • パッケージ C:\Documents and Settings\All Users\Documents\RAD Studio\5.0\Bpl\MyPanels.bpl は、別のバージョンの Delphi または CBuilder で作成されているため、インストールできません。次回プロジェクトをロードするときに、このパッケージのロードを試みますか? (注: 私は Delphi の 1 つのバージョン -- Delphi 2007 でのみこれを構築しました)
  • ある時点で、MyPanels のパッケージの説明が "取得" されていないことに気付きました (つまり、ファイル名が [ツール] -> [コンポーネント] -> [パッケージのインストール] のように表示されました)。 IDEが見つけたり使用したりしているファイルですが、私はそれを見たり見つけたりしていません。
  • 起動時に Delphi が表示する警告は、インストール済みのパッケージをロードできないこと、次回ロードしますか、などを示します。
  • パッケージ 'MyPanels.bpl' のパッケージ情報にアクセスできません (泡立て、すすぎ、繰り返し)

すべてのヘルプ/指示: 診断方法と、何を探すべきかを理解するのに役立つ概念的な説明があれば、最も高く評価されます。前もって感謝します。皆さん、ここでとても役に立ちました!ありがとうございました。: )


後で更新:

これを少し脇に置いて戻ってきた後、すべての DCP / DCU MyPanels ファイルを削除してから、3 つのパッケージを段階的にインストールしてみました。(VMWare は、ここで金の価値がありました。問題が発生した場合に最初からやり直す必要がないように、成功するたびにスナップショットを作成します)。ViewerSet1 パッケージからダイアログ フォームを削除すると、問題なくインストールされることがわかりました。次に、フォームを再度追加すると ( ここで遭遇したように、DFM には表示されません)、正常にインストールされるようです。すべてのコンポーネントがインストールされておらず、正常に動作しているように見えます (そして、VM 内の全体のスナップショットを作成します!) が、何が問題なのか、その理由はまだわかりません。そのフォームを追加すると、最初に何ができて、これらの種類のエラーが発生するのでしょうか? 何か案が?

「パッケージ情報にアクセスできません」というエラーがどのような原因で発生する可能性があるかについてのより良い説明/理解は、長期的には役立つと思います.

4

1 に答える 1

0

OK、間違いなく私が見逃しているものがあります。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;

したがって、この最後のエラーが発生した場合は、パッケージに必要な PACKAGEINFO リソースが添付されていません。これはおそらく、最初のエラー (別のバージョンの Delphi で作成された) の原因でもあります。

申し訳ありませんが、[ファイル] -> [新規] -> [パッケージ] - [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 が実際に読み込もうとしているものをスパイすることもできます。あなたのパッケージによってロードされている別のパッケージである可能性が非常に高く、この 2 番目のパッケージには PACKAGEINFO が添付されていません。

于 2009-07-11T06:25:59.790 に答える