gpt4 book ai didi

delphi - 使用 TJvPluginManager 获得返回值的最佳方式

转载 作者:行者123 更新时间:2023-12-03 15:49:04 24 4
gpt4 key购买 nike

我目前正在开发一个简单的程序,该程序实现带有 dll 库的插件(使用 JVCL 框架中的 TJvPluginManager)。

到目前为止,我已经弄清楚如何使用此组件来处理命令,但是如果我想从库内的自定义函数获得返回值怎么办?是否可以使用 TJvPluginManager 从主机调用某个函数?我应该如何实现这个?

这个漏洞的想法是在每个 dll 中都有一个返回字符串的函数,这样就可以使用简单的 cicle 来调用它。我想我可以手动完成此操作(使用动态加载),但我想尽可能多地使用 TJvPluginManager。

感谢您的宝贵时间。约翰·马科

最佳答案

我这样做的方法是在插件中实现一个接口(interface)并从主机调用它,例如

MyApp.Interfaces.pas

uses
Classes;

type
IMyPluginInterface = interface
['{C0436F76-6824-45E7-8819-414AB8F39E19}']
function ConvertToUpperCase(const Value: String): String;
end;

implmentation

end.

插件:

uses
..., MyApp.Interfaces;

type
TMyPluginDemo = class(TJvPlugIn, IMyPluginInterface)
public
function ConvertToUpperCase(const Value: String): String;
...

implmentation

function TMyPluginDemo.ConvertToUpperCase(const Value: String): String;
begin
Result := UpperCase(Value);
end;

...

主持人:

uses
..., MyApp.Interfaces;

...

function TMyHostApp.GetPluginUpperCase(Plugin: TjvPlugin; const Value: String): String;
var
MyPluginInterface: IMyPluginInterface;
begin
if Supports(Plugin, IMyPluginInterface, MyPluginInterface) then
Result := MyPluginInterface.ConvertToUpperCase(Value)
else
raise Exception.Create('Plugin does not support IMyPluginInterface');
end;

希望这有帮助。

关于delphi - 使用 TJvPluginManager 获得返回值的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4275983/

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