4

私は Delphi 2007 でテストしており、グループ プロジェクトは 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 が必要で、「設計時のみ」とマークされており、次のコードを記述した「uMyTestDes.pas」という名前のユニットが含まれています。

unit uMyTestDes;

interface

uses
  Classes,
  uMyTestRun;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MyComponents', [TMyTest]);
end;

end.

両方のパッケージの出力ディレクトリはライブラリ パスにあります (内部には bpl、dcp、および dcu があります)。


PackageDes.bpl (コンポーネント、パッケージのインストール...、追加...) をインストールしようとすると、次のエラーが発生します。

パッケージ C:\<...>\PackageDes.bpl を読み込めません。不可能なトロヴァーレ イル モジュロ スペシアート。

メッセージの最後の部分は私の OS の言語です。英語では、「指定されたモジュールが見つかりません」のようなものになるはずです。(私のOSはWindows 10 Pro 64bitです)。

PackageDes.bpl は、エラー メッセージに示されているのとまったく同じパス (C:\<...>\PackageDes.bpl) にあります。いくつかのテストの後、uMyTestDes.pas ユニットから次の行を削除すると、エラーが消えることがわかりました。

RegisterComponents('MyComponents', [TMyTest]);

私のコード/プロジェクト/環境に何か問題がありますか?

4

4 に答える 4

13

http://SysInternals.comから Process Monitor を実行し、フィルターを設定して、Delphi IDE プロセスのファイル操作 (ツールバーの右端のボタン) のみをインターセプトします (タスク マネージャーまたはショートカット プロパティでプロセス名を確認します (Delphi XE2 の場合は bds.exe です)。 、次に Include / Process Name / Ends With / bds.exeのようなフィルターを追加します)。

次に、PM のログをクリアし、Delphi に切り替えてパッケージのロードを試みます。エラーが発生したらすぐに PM に戻り、イベントのキャプチャを停止します。たとえば、エラー ボックスを閉じて時間を無駄にしないようにします。

これで、Delphi が自分のパッケージをロードするファイル I/O アクティビティのトレースが得られます (およびその他のバックグラウンド アクティビティ ノイズ - 高速に実行するほど、ノイズは少なくなります)。そのトレースですべてのエラーを探し、Delphi がどこでどのパッケージを見つけようとしているかを確認します。

Microsoft Dependency Walker または同様のツールを試して、設計時の BPL に解決可能なすべての DLL 依存関係ツリーがあるかどうかを確認することもできます。個人的には、Unreal/Total Commander と FileInfo プラグインまたは ntCore CFF Explorer を使用することがよくあります。

于 2016-09-27T14:51:53.420 に答える
1

この問題を解決する簡単な方法は、ビルド後のアクションをランタイム プロジェクトに追加することです。

copy "$(OUTPUTDIR)\$(OUTPUTFILENAME)" "$(BDSCOMMONDIR)\Bpl"

上記のコマンドは、ランタイム ファイルをデフォルトの IDE Bpl の場所にコピーします。

于 2017-02-24T22:44:14.453 に答える
-4

register手順をuMyTestRun単位に変更してみてください。

unit UMyTestRun;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;

type
  TMyTest = class(TFrame)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MyComponents', [TMyTest]);
end;
end.

これで、パッケージが正しくインストールされます。

よろしく。

于 2016-09-27T14:35:27.447 に答える