2009-12-03 42 views
1

我正在構建一個使用插件的應用程序。我正在使用優秀的JVCL插件框架。我首先開始使用包插件。它像一個魅力一樣工作,但有一個很大的缺點:需要運行時bpl(23Mo)。所以我切換到DLL插件。如何在DLL中實現回調方法(Delphi/TJVPluginManager + TJvPlugin)

我需要從hostapplication調用一個方法(程序有3個參數),但我不知道該怎麼做。在Jedi新組中解釋的OBones使用回調函數,但我不知道如何實現這一點。

有人可以善意解釋我或更好的,給我一個例子嗎?您可以參加JVCL 1SimplePlugin演示並進行更新。

謝謝在提前

BR

斯特凡Wierzbicki

回答

3

的基本概念是非常簡單的。回調方法是指向您傳遞給某些代碼的方法的指針,以便它可以在特定時間調用它以允許您自定義其行爲。如果你有使用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