使用TJvPluginManager获得返回值的最佳方法

Rad*_*diX 3 delphi plugins jvcl

我目前正在一个简单的程序中使用dll库实现插件(使用JVCL框架中的TJvPluginManager).

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

洞的想法是有一个函数在每个dll中返回一个字符串,因此可以使用一个简单的cicle调用它.我想我可以手动完成这个(使用dinamic加载)但我想尽可能多地使用TJvPluginManager.

感谢您的时间.约翰马可

nor*_*aul 6

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

MyApp.Interfaces.pas

uses
  Classes;

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

implmentation

end.
Run Code Online (Sandbox Code Playgroud)

插件:

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;

...
Run Code Online (Sandbox Code Playgroud)

主人:

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;
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.