首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从bpl调用导出函数

无法从bpl调用导出函数
EN

Stack Overflow用户
提问于 2011-05-26 02:10:26
回答 2查看 1.9K关注 0票数 3

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

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

代码语言:javascript
复制
unit Unit3;

interface

implementation

uses Dialogs;

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

exports TestProc;

end.

案例1:

代码语言:javascript
复制
procedure TestProc(const S: string); stdcall; external 'mydll.dll';

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

案例2:

代码语言:javascript
复制
procedure TestProc(const S: string); stdcall; external 'Package1.bpl';

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

案例3:

代码语言:javascript
复制
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;

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

我的问题如下,

  1. Case 2不受支持?
  2. ,除了案例3之外,还有类似于Case1?

的Package1.bpl调用TestProc吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-26 03:06:11

是的,支持用例2,但您也必须调用LoadPackage函数才能在内存中加载包。

试试这段代码

代码语言:javascript
复制
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);
票数 3
EN

Stack Overflow用户

发布于 2011-05-26 07:02:03

对于案例2,您也可以简单地使用运行时包构建项目,并将Package1包含在项目运行时包列表中(在project \ packages \中)。然后可以删除导入(external声明),只需使用包含该函数的单元。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6132993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档