How to implement a callback method within DLL (Delphi / TJVPluginManager + TJvPlugin)

陌路散爱 提交于 2019-12-23 02:17:17

问题


I'm building an application working with plugins. I'm using the excellent JVCL plugin framework. I first started to use package plugin. It worked like a charm but had a big drawback : the needs to give runtimes bpl (23Mo). So I switch to DLL plugin.

I need to call a method (procedure having 3 parametes) from hostapplication but I don't know how to do it. OBones explained in the Jedi newgroup to use callback functions but I have no clue on how to achieve this.

Can someone kindly explain me or better, send me an example? You can take the JVCL 1SimplePlugin demo and update it.

Thank in in advance

BR

Stephane Wierzbicki


回答1:


The basic concept is pretty simple. A callback method is a pointer to a method that you pass to some code so that it can call it at a specific time to allow you to customize its behavior. If you have any experience at all with Delphi, you're already familiar with callback methods under a different name: "event handlers".

Try something like this in your plugin:

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

procedure AddCallback(callback: TMyEvent);

This procedure would take the TMyEvent method pointer passed in and store it somewhere. Let's say in a variable called FCallback. When the time comes for it to call your app, the code would look like this:

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

You would call it from your app like this, when you're setting up the plugin:

MyPlugin.AddCallback(self.callbackProc);

Sometimes you'll need to put an @ in front of it (@self.callbackProc) so the compiler can tell that it's a method pointer and not a method call, but this is not always necessary.



来源:https://stackoverflow.com/questions/1839217/how-to-implement-a-callback-method-within-dll-delphi-tjvpluginmanager-tjvpl

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!