delphi - 无法从 bpl 调用导出函数

标签 delphi delphi-xe

我使用 Delphi XE,我有以下设置:

Mydll.dllPackage1.bpl(运行时包)都包含Unit3.pas

unit Unit3;

interface

implementation

uses Dialogs;

procedure TestProc(const S: string); stdcall;
begin
  MessageDlg(S, mtInformation, [mbOK], 0);
end;

exports TestProc;

end.


情况1:

procedure TestProc(const S: string); stdcall; external 'mydll.dll';

procedure TForm1.Button3Click(Sender: TObject);
begin
  TestProc('Button3');
end;


情况2:

procedure TestProc(const S: string); stdcall; external 'Package1.bpl';

procedure TForm1.Button3Click(Sender: TObject);
begin
  TestProc('Button3');
end;


情况3:

procedure TForm1.Button3Click(Sender: TObject);
var H: THandle;
    P: procedure(const S: string); stdcall;
begin
  H := LoadPackage('Package1.bpl');
  try
    @P := GetProcAddress(H, PChar('TestProc'));
    if Assigned(P) then
      P('Button3');
  finally
    UnloadPackage(H);
  end;
end;


案例 1案例 3 通过了,但案例 2引发访问冲突


我的问题如下,

1.不支持情况2?
2.除了Case 3之外,是否还有像Case1一样从Package1.bpl调用TestProc?

最佳答案

是的,支持情况 2,但您必须调用 LoadPackage函数也可以将包加载到内存中。

试试这个代码

procedure TestProc(const S: string); stdcall;  external 'Package1.bpl';


var
  hPackage : Cardinal;

procedure TForm1.Button1Click(Sender: TObject);
begin
   TestProc('Button3');
end;


initialization
  hPackage := LoadPackage('Package1.bpl');
finalization
  if hPackage<>0 then 
  UnloadPackage(hPackage);

关于delphi - 无法从 bpl 调用导出函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6132993/

相关文章:

json - Delphi - 在修复 VCL 错误时,单元 x 是用不同版本的 x 编译的

Delphi HtmlHelpAPI-如何指导 CHM 文件打开到不同的部分

delphi - IDE 渐变工具栏

delphi - 基于泛型参数类型的类型推断(Delphi)

delphi - 在 Delphi XE2 中同时调试多个应用程序

delphi - 支持 Unicode 的 PDF 引擎

php - 我可以使用 Delphi 写入 BDE 并使用 PHP 读取它吗?

delphi - Delphi 组件中的公共(public)类型

delphi - 如何将接口(interface)参数传递给Spring4D?

arrays - 将动态数组类型分配给 TArray<T> 变量