Как реализовать метод обратного вызова в DLL (Delphi / TJVPluginManager + TJvPlugin) - PullRequest
1 голос
/ 03 декабря 2009

Я создаю приложение, работающее с плагинами. Я использую отличный плагин JVCL. Я впервые начал использовать пакет плагинов. Это работало как шарм, но имело большой недостаток: необходимость дать время выполнения bpl (23Mo). Поэтому я переключаюсь на плагин DLL.

Мне нужно вызвать метод (процедуру, имеющую 3 параметра) из hostapplication, но я не знаю, как это сделать. В новой группе джедаев OBones объяснили использование функций обратного вызова, но я понятия не имею, как этого добиться.

Может кто-нибудь любезно объяснить мне или лучше, пришлите мне пример? Вы можете взять демонстрационную версию JVCL 1SimplePlugin и обновить ее.

Заранее благодарен

BR

Стефан Вежбицкий

1 Ответ

3 голосов
/ 03 декабря 2009

Основная концепция довольно проста. Метод обратного вызова - это указатель на метод, который вы передаете некоторому коду, чтобы он мог вызывать его в определенное время, чтобы вы могли настроить его поведение. Если у вас есть опыт работы с 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), чтобы компилятор мог сказать, что это указатель метода, а не вызов метода, но это не всегда необходимо.

...