我在一个单位上课。通常,当我改变其方法的算法时,我必须重新编译它并整体交付补丁。
我想使用 DLL 创建类的实例。在delphi.about.com搜索后,我发现可以使用BPL代替DLL。它是 Delphi 的 DLL。问题是我发现的几乎所有示例都只是告诉如何导出函数。
我想动态加载BPL,每当我替换BPL时,我都可以获得该类的最新算法,而不仅仅是我导出的函数。
我读过的文章:
- http://delphi.about.com/od/objectpascalide/a/bpl_vs_dll.htm http://delphi.about.com/od/objectpascalide/a/bpl_vs_dll.htm
- Delphi 应用程序的插件系统 - bpl 与 dll? https://stackoverflow.com/questions/1192734/plugins-system-for-delphi-application-bpl-vs-dll
- http://delphi.about.com/library/weekly/aa012301a.htm http://delphi.about.com/library/weekly/aa012301a.htm
非常感谢任何 URL 或如何从头开始创建 BPL 来封装组件或类的示例。
亲爱的上师,
假设我有这样的代码:
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的所有公共方法,如何将其做成DLL?
如何从另一个单位导入它来使用它?
比方说:
var a: A;
a := A.Create;
a.GetB;
showMessage(a.HelloA);
A 未在单元中声明(它在 DLL 中)。
请指教。
欢呼。我昨晚收到了。我所要做的就是让对象实现一个接口,该接口在调用方单元中使用来捕获 DLL 返回的对象实例。
谢谢你们。
Mason 已经解决了这个问题,但让我详细说明一下为什么 BPL 不是您想要的。
BPL 是 Delphi IDE 加载共享相同内存管理器和 RTL 的组件的一种方法。 (类型标识使用 BPL 几乎透明地工作)
然而,你所陷入的依赖关系几乎总是不可接受的。除了IDE,无论如何它都无法处理不同版本的RTL和VCL。
当您仅在应用程序及其 DLL 之间传递接口引用时,您根本不必共享 RTL、VCL 或共享包。
这也意味着您可以用另一种语言(C++、C#、FPC、另一个 Delphi 版本)编写一些 DLL,并且仍然使用对象。当您不想移植主应用程序但仍想使用不适用于 Delphi 或您的 Delphi 版本的现有库时,这可能很诱人。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)