Delphi:找不到资源错误?

标签 delphi dll

我正在尝试使用 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.

最佳答案

解决方案:

我使用 TCustomPanel 作为 TModulBase 的祖先,但我发现了问题,Remy 是对的。我删除了祖先类以替换为接口(interface),并且我的所有其他插件都必须使用相同的接口(interface)(如果您在正常的 dll 项目中使用这种方式,您将得到一个不同的错误!我尝试过:(您必须使用它使用 bpl(bpl 也是一个 dll))

PIModuleBase = ^IModulBase;

IModulBase = interface 
   ...
end;

这个按钮点击只是一个示例,您必须创建一个模块管理器类

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.

重要的事情:

不能直接将接口(interface)库文件导入到模块包文件中,也不能在主应用项目中导入!您必须为接口(interface)和共享库文件创建一个新的 bpl 项目,并且您需要将它们放入您的模块包中,例如 vlc、rtl。

并且您需要使用此接口(interface)包构建主应用程序

Build with runtime packages

enter image description here

关于Delphi:找不到资源错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8109332/

相关文章:

c#如何组织dll工具?

c++ - 如何在 go 中使用 .lib 和 .dll 文件调用预构建的 API?

c++ - 从 C++ dll 回调到 delphi 应用程序

c# - C# 中的堆错误

delphi - 如何解释从 VBscript 传递到 Delphi COM 服务器应用程序的数组

windows - 使用 Indy 组件发送电子邮件

java - JNA如何在从dll接收到的指针中调用java中的方法?

c# - 即使在部署后也从不同的文件夹引用 dll

delphi - Delphi 使用哪些 Windows 消息来通知组合框中的更改?

android - 他们是否根据屏幕大小设置图标/字体/等大小的任何规则