如何在DLL中实现回调方法(Delphi/TJVPluginManager + TJvPlugin)

问题描述:

我正在构建一个使用插件的应用程序。我正在使用优秀的JVCL插件框架。我首先开始使用包插件。它像一个魅力一样工作,但有一个很大的缺点:需要运行时bpl(23Mo)。所以我切换到DLL插件。如何在DLL中实现回调方法(Delphi/TJVPluginManager + TJvPlugin)

我需要从hostapplication调用一个方法(程序有3个参数),但我不知道该怎么做。在Jedi新组中解释的OBones使用回调函数,但我不知道如何实现这一点。

有人可以善意解释我或更好的,给我一个例子吗?您可以参加JVCL 1SimplePlugin演示并进行更新。

谢谢在提前

BR

斯特凡Wierzbicki

的基本概念是非常简单的。回调方法是指向您传递给某些代码的方法的指针,以便它可以在特定时间调用它以允许您自定义其行为。如果你有使用Delphi的经验,你已经熟悉了使用不同名称的回调方法:“事件处理程序”。

尝试这样的事情在你的插件:

type 
    TMyEvent = procedure(param1, param2, param3: integer) of object; 

procedure AddCallback(callback: TMyEvent); 

这个过程将需要传递的TMyEvent方法指针和存储在某个地方。比方说一个名为FCallback的变量。届时它打电话给你的应用程序,代码应该是这样的:

if assigned(FCallback) then 
    FCallback(param1, param2, param3); 

你会说它是从你的应用程序就是这样,当你设置的插件:

MyPlugin.AddCallback(self.callbackProc); 

有时你需要在它前面加上@(@ self.callbackProc),这样编译器才能知道它是一个方法指针而不是方法调用,但这并不总是必需的。

+0

谢谢,但我不知道如何使用JvPlugin框架来实现这一点。 我仍然试图找到一种方法正确地申报: - 我的JVPlugin(如何声明AddCallback过程在声明部分)。 - 我的HostApplication(如何调用AddCallback过程的例子) – 2009-12-03 14:44:54

+0

你确定OBones意味着在jvplugin框架中实现这个吗? – 2009-12-03 15:23:26

+0

只需检查JVCL新闻组“从TJvPlugin向主机发送消息的最佳方式是什么?”日期为2009年2月3日 – 2009-12-03 17:07:12