14

(より多くのパッケージ/コンポーネントのインストールが私にとって楽しいです -- これまでのすべての助けに感謝します)。

Delphi 2007 で、タイトルに記載されているエラーが表示されます。パッケージ A は、フレーム ベースの「ビューア パネル」のパッケージです。パッケージ B は、特定のデータベースにリンクされたデータセットに関する情報 (SQL、状態、クラス タイプなど) を表示するために使用されるいくつかのコンポーネントを含むパッケージであり、そのうちの 1 つは非ビジュアル コンポーネントです (これをインスペクタ) は、その情報を表示するフォームを作成して呼び出します。ユニットXはその形態のユニットです。

Inspector コンポーネントをパッケージ内のビューアー パネルの 1 つに追加しましたが、それを削除したため、プロジェクトの [ソースの表示] にも、追加したフレームベースのビューアー パネルのユニットにも参照が見つかりません。リファレンスはどこに隠れていますか?

また、その Inspector コンポーネントをビュー パネル フレーム (登録済みコンポーネントとしてもインストールされる) の 1 つに追加すると、この問題が発生するのはなぜでしょうか?

これは、この前の質問これにも関連している可能性がありますが、簡潔かつ明確に保ち、​​後で他の人に役立つことを願って、この特定の症状/問題から新たに始めることにしました. あらゆる助けを前もって感謝します。


アップデート:

Loren のおかげで、問題の原因となっていた USES 参照を見つけて削除することができました。ただし、達成しようとしていることを達成する方法についてはまだ明確ではありません。: \ これが最新です:

Inspector は、DataSet プロパティと内部「情報フォーム」を含む単純な非ビジュアル コンポーネントです。ShowInfo メソッドを呼び出すと、フォームが作成され、リンクされた DataSet に関連するさまざまな情報が入力されます。ビューアーを駆動する SQL をデバッグするために使用したいと考えています。

前述のように、Inspector はパッケージ B に含まれています。ビューアはパッケージ A にあります。TFrame の子孫 (真のパレット コンポーネントとして登録される) の一部で Inspector コンポーネントを使用したいと考えています。ただし、そのコンポーネントを特定の TFrame にドロップして使用し、パッケージ A をコンパイル/インストールすると、「パッケージ A を読み込めません。パッケージ B にも含まれるユニット X が含まれています」というエラーが表示されます。それが原因であることは明らかで、必要に応じて問題を再現できます。

以下のmoobaaの提案は理にかなっていますが、彼が提案するアプローチ2を実行しようとしてもうまくいかないようです私は何が欠けていますか?これは実行可能であるように思われます。実際、私が見たほとんどのパッケージは、他のインストール済みパッケージを常に使用しているようです (VCL 自体を含む)。

注: 私が知る限り、パッケージ B はパッケージ A に依存していません (スタンドアロンでインストールしたので、同意しているようです)。

(ところで、このようなパッケージの依存関係を「グラフ化」するツールはありますか?私は D2007 を使用しています)

いつものように、あなたの時間と助けに感謝します.

4

3 に答える 3

8

この質問にも関連している可能性があります。

ユニット X は明らかに両方のパッケージにリンクされています。これにはいくつかの方法があります。

  • ユニット X (およびその他の依存関係) を使用して新しいパッケージ (パッケージ C と呼びます) を作成し、パッケージ A とパッケージ B を変更して、両方ともパッケージ C を使用するようにします。また...
  • ユニット X をパッケージ B に含め、パッケージ A にパッケージ B (最初のソリューションのよりコンパクトな形式) を使用させます。

ビューアがパッケージ B のコードで明示的に言及されている場合、パッケージ B はパッケージ A を使用しているはずです (つまり、そこに明示的な依存関係があるはずです)。共有コードが明示的に示されていない場合、B は独自のバージョンのコードを B にコンパイルし、問題を引き起こします。

ここで、その依存関係が問題ない場合、パッケージ B からパッケージ A への参照を追加すると、この問題はすぐに解消されます。結局、B はパッケージ A のコードを「使用」し、同じユニットが 2 つのパッケージにコンパイルされることはありません。ただし、これが循環参照を導入する場合 (A が B を使用するかどうかは思い出せません)、次のように少しリファクタリングする必要があるかもしれません:}

于 2009-07-28T02:19:46.273 に答える
4

コンポーネントを削除したからといって、USES 句からモジュール名を削除したわけではありません。これらは自動削除されません。

于 2009-07-28T04:39:15.717 に答える
0

Loren:Requires句。これは.dpkであるため、パッケージafaikを使用することはできません。

$(BDSDIR)/ projects / dir、自分のプロジェクトdirをクリーンアップして、BにあったユニットのB.dcpとすべてのdcuを削除してから、Aを再構築します。

Bに依存するコンポーネントが登録されているかどうかを確認するもう1つのこと。

于 2009-07-28T10:22:03.043 に答える