|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.01.2016, 16:34 | #1 |
Форумчанин
Регистрация: 16.04.2007
Сообщений: 225
|
Управление объектом приложения из длл (Plugin)
Есть программа, которая умет использовать плагины, все работает хорошо, НО чтобы что-то сделать в программе - приходится изобретать велосипед передавая в PlugProc все данные и вызывая их уже в основной программе.
Немного кода из плагина: Код:
Код:
Как сделать адаптер (класс), который можно передать из Основной программы в Плагин(dll), и в плагине вызывать его методы. Сейчас для этого нужно делать @PlugProc := Pointer(pproc); для каждого метода, а их достаточно много. На сколько я знаю, можно просто создать копию описания класса в плагине и передавать адрес на всю структуру класса, НО при условии точной копии описания, а я не знаю ВСЕХ методов. Также знаю что можно просто создать наследника этого класса и не описывать все, но получив доступ ко всем родительским методам. Но как здесь подойти пока не понимаю. |
30.01.2016, 18:26 | #2 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
На интерфейсах все реализуйте.
Плагин IPlugin, реализует некий свой TPluginMega с обязательными методами, заявленными в интерфейсе. На старте, ядром вызывается функция в dll, куда передается интерфейс приложения-ядра. Все. Плагин делает QueryInterface и получает то, что хочет из основного приложения. |
30.01.2016, 18:44 | #3 |
Форумчанин
Регистрация: 16.04.2007
Сообщений: 225
|
К сожалению мне трудно Вас понять, прочитал целую серию статей о плагинах в блоге GunSmoker как там это все реализовано, но тоже не понял как это можно реализовать.
Есть ли где-то пример реализации или статья по этому поводу. И\или что нужно предоставить Вам для этого. |
30.01.2016, 19:26 | #4 | |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
Цитата:
|
|
30.01.2016, 19:35 | #5 |
Форумчанин
Регистрация: 16.04.2007
Сообщений: 225
|
Там не рассматривается мой пример на сколько я понял и реализовываются свои плагины, у меня уже все готово, и изменить я это не могу, нету доступа к исходникам приложения, есть только paxcompiler где могу немного "подшаманить" и вызвать этот плагин и не более того.
Говорить о таких вещах как интерфейсы полноценные как в статье GunSmoker paxcompiler не знает, а если извращатся то делает это также извращенно. Спасибо. |
30.01.2016, 19:43 | #6 |
Старожил
Регистрация: 30.12.2009
Сообщений: 11,430
|
На сколько помню этот скрипт. движек умеет создавать интерфейсы, опишите интерфейс всего нужного в скрипте, затем этот интерфейс передавайте в свой плагин.
|
30.01.2016, 19:47 | #7 |
Форумчанин
Регистрация: 16.04.2007
Сообщений: 225
|
Спасибо - буду дальше пытаться, думаю мне нужно просто чуть лучше изучить доступную информацию.
|
30.01.2016, 19:49 | #8 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Создаешь интерфейс.
IMyInterface Генерируешь к нему GUID. Помещаешь его в *.inc Он будет использоваться как в плагине так и в баовой программе. Поэтому через inc проще что-бы не копировать. Создаешь интерфейсы класс Type TMyClass=Class(TInterfacedObject, IMyInterface) ... передаешь из плагина в основную программу ссылку на объект этого класса. Передаешь в обезличенном виде т.е. как TInterfacedObject Пусть эта передача сделана функцией GetObj. var MyObj:IMyInterface; Obj:=GetObj; // Далее используем как обычный объект Obj.Foo(x,y); Obg.MyProperty:=x;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
30.01.2016, 19:52 | #9 | ||
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Цитата:
Тогда да придётся писать адаптер. Цитата:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
||
30.01.2016, 22:11 | #10 |
Форумчанин
Регистрация: 16.04.2007
Сообщений: 225
|
Спасибо, какие-то интерфейсы есть, сейчас как раз эксперементирую, но пока ничего не получается, TMyClass=Class(TInterfacedObject, IMyInterface) не хочет создавать класс.
А как можно написать адаптер для всего класса, или только методами?? Последний раз редактировалось IvaniuS; 31.01.2016 в 13:34. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Управление socket'ом чужого приложения, как в WPE PRO | Reimscher | Работа с сетью в Delphi | 13 | 05.08.2015 17:14 |
Управление компонентами другого приложения/окна | OmegaBerkut | Общие вопросы Delphi | 9 | 16.09.2013 13:03 |
Plugin для IE | draiffer | C/C++ Сетевое программирование | 0 | 29.03.2012 18:11 |
QIP Plugin | W0LF | Общие вопросы Delphi | 3 | 24.04.2011 11:28 |
Управление настройками компьютера из приложения Delphi | Saili | Общие вопросы Delphi | 2 | 05.12.2006 11:41 |