Delphi:リソースが見つかりませんでしたか?

私はBPLを使用してdelphi2010でモジュール式アプリケーションを作成しようとしています。
問題は、BPL内でクラスを作成しようとすると、このエラーメッセージが表示されます。

enter image description here

私はリソース(RESファイル)について何もしなかった!

Procedure TControllerMain.Btn1OnClick(Sender: TObject);
type
  TInitProcedure = function: TModuleBaseClass; stdcall;
  TModuleBaseClass= class of TModuleBase;
var
  h: HMODULE;
  proc: TInitProcedure;
  vClass: TModuleBaseClass;
begin
  h := LoadPackage('test.bpl');
  @proc := GetProcAddress(h, 'InitializePlugin');
  vClass := proc();
  vClass.Create(nil); //error here
  UnloadPackage(h);
end;

DLLコード

TModuleBaseはTCustomPanelです

type
  TVLCVideo = class(TModuleBase)
  private
   ...
  public
   ...
  end;
function InitializePlugin: TModuleBaseClass; stdcall;


implementation
function InitializePlugin: TModuleBaseClass;
begin
  Result := TVLCVideo;
end;


exports
  InitializePlugin;

end.
ベストアンサー

ソリューション :

私はTModulBaseの祖先にTCustomPanelを使用していましたが、問題が見られた、Remyは正しいです。私は先祖クラスをインタフェースで置き換え、他のすべてのプラグインは同じインタフェースを使用しなければなりません(通常のdllプロジェクトでこの方法を使用すると、別のエラーが発生します!
bpl(bplもdllです))

PIModuleBase = ^IModulBase;

IModulBase = interface 
   ...
end;

このボタンのクリックは、modulマネージャクラスを作成するだけのサンプルです

Procedure TControllerMain.Btn1OnClick(Sender: TObject);
type
  TInitProcedure = function: PIModuleBase; stdcall;

var
  h: HMODULE;
  proc: TInitProcedure;
  vClass: PIModuleBase;
begin
  h := LoadPackage('test.bpl');
  @proc := GetProcAddress(h, 'InitializePlugin');
  vClass := proc();
  vClass^.setParent(form1);
  vClass^.setPosition(0,0,100,100);
  vClass^.play(PChar('url of media'));  
  //UnloadPackage(h);
end;



type
  TVLCVideo = class(TCustomPanel, IModulBase)
  private
   ...
  public
   ...
  end;
function InitializePlugin: PIModuleBase; stdcall;


implementation
function InitializePlugin: PIModuleBase;
var
 v : TVLCVideo;
begin
  v := TVLCVideo.Create(nil);
  Result := IModuleBase(v);
end;


exports
  InitializePlugin;

end.

大事なこと :

インターフェイスライブラリファイルをモジュールパッケージファイルに直接またはメインのアプリケーションプロジェクトにインポートすることはできません!あなたはインターフェイスと共有ライブラリファイルのためだけに新しいbplプロジェクトを作成しなければなりません。それらのモジュールパッケージをvlc、rtlのような必須セクションに配置する必要があります。

そして、あなたはこのインタフェースパッケージでメインアプリケーションを構築する必要があります

Build with runtime packages

enter image description here

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です