如何在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),这样编译器才能知道它是一个方法指针而不是方法调用,但这并不总是必需的。
谢谢,但我不知道如何使用JvPlugin框架来实现这一点。 我仍然试图找到一种方法正确地申报: - 我的JVPlugin(如何声明AddCallback过程在声明部分)。 - 我的HostApplication(如何调用AddCallback过程的例子) – 2009-12-03 14:44:54
你确定OBones意味着在jvplugin框架中实现这个吗? – 2009-12-03 15:23:26
只需检查JVCL新闻组“从TJvPlugin向主机发送消息的最佳方式是什么?”日期为2009年2月3日 – 2009-12-03 17:07:12