gpt4 book ai didi

delphi - 使用 BPL 加载 Delphi 对象运行时

转载 作者:行者123 更新时间:2023-12-03 15:45:55 31 4
gpt4 key购买 nike

我在一个单元里上课。通常,当我改变其方法的算法时,我必须重新编译它并整体交付补丁。我想使用 DLL 创建类的实例。在delphi.about.com搜索后,我发现我可以使用BPL来代替DLL。它是 Delphi 的 DLL。问题是我发现的几乎所有示例都只是告诉如何导出函数。我想动态加载BPL,每当我替换BPL时,我都可以获得该类的最新算法,而不仅仅是我导出的函数。

我读过的文章:
-http://delphi.about.com/od/objectpascalide/a/bpl_vs_dll.htm
-Plugins system for Delphi application - bpl vs dll?
-http://delphi.about.com/library/weekly/aa012301a.htm

任何关于如何从头开始创建 BPL 来封装组件或类的 URL 或示例都将受到高度赞赏。

<小时/>

亲爱的大师,

假设我有这样的代码:

unit unitA;

interface

type
B = class(TObject)
public
procedure HelloB;
end;

A = class(TObject)
public
function GetB: B;
function HelloA: String;
procedure Help;
end;

implementation

uses
Dialogs;

{ B }

procedure B.HelloB;
begin
ShowMessage('B');
end;

{ A }

function A.GetB: B;
begin
Result := B.Create;
end;

function A.HelloA: String;
begin
Result := 'Hello, this is A';
end;

procedure A.Help;
begin
//do something
end;

end.

我想导出A的所有公共(public)方法,如何将其做成DLL?如何从另一个单位导入它来使用它?让我们说:

 var a: A;

a := A.Create;
a.GetB;
showMessage(a.HelloA);

A 未在单元中声明(它在 DLL 中)。请指教。

<小时/>

万岁。我昨晚收到了。我所要做的就是让对象实现一个接口(interface),该接口(interface)在调用方单元中使用来捕获 DLL 返回的对象实例。

谢谢大家。

最佳答案

Mason 已经解决了这个问题,但让我详细说明一下为什么 BPL 不是您想要的。BPL 是 Delphi IDE 加载共享相同内存管理器和 RTL 的组件的一种方法。 (类型标识使用 BPL 几乎透明地工作)

但是,您所陷入的依赖关系几乎总是 Not Acceptable 。除了IDE,无论如何它都无法处理不同版本的RTL和VCL。

当您在应用程序及其 DLL 之间仅传递接口(interface)引用时,您根本不必共享 RTL、VCL 或共享包。

这也意味着您可以用另一种语言(C++、C#、FPC、另一个 Delphi 版本)编写一些 DLL,并且仍然使用对象。当您不想移植主应用程序但仍想使用不适用于 Delphi 或您的 Delphi 版本的现有库时,这可能很诱人。

关于delphi - 使用 BPL 加载 Delphi 对象运行时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1700366/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com