Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.22;
Скачать: CL | DM;

Вниз

Умные плагины в DLL   Найти похожие ветки 

 
П7   (2004-08-03 15:49) [0]

Товарищи!
Нужно, чтобы приложение подгружало плагины, которые затем будут каким-либо образом передавать этому приложению команды. Формат команд произвольны, в принцыпе. Например из окна, хранящегося в DLL нужно будет запустить определённую функцию основной программы, с определёнными параметрами. Например:

GetCommand( "QUIT" );

Сея команда должна обработаться на основе данных основной формы программы и выполнится.

if ( CurrentCommand = "QUIT" ) and ( bQuit = true ) then
 Application.Terminate();

Но как всё это реализовать? Если из приложения запустить функцию DLL не проблема по умолчанию, то как обстоят дела при обратном подходе к проблеме?

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


 
Goffman   (2004-08-03 16:08) [1]

Можно реализовать в главной форме интерфейс, например:
IMyIntf=interface
 function DoCommand(cmd:string):integer;
end;


из длл-ки вызываешь
var
 myIntf:IMyIntf;
begin
 if Application.MainForm.GetInterface(IMyIntf,myIntf) then
   myIntf.DoCommand("MY_COMMAND");
end;


 
П7   (2004-08-03 16:23) [2]


> Goffman   (03.08.04 16:08) [1]

Можно поподробнее. Я с интерфейсами в Delphi не знаком, каким образом можно будет обратится к функции главной формы программы? Если я правильно понял, то мы имеем некую общую (глобальную) переменную типа функция, присваиваем ей функцию основной формы и пользуемся ей в DLL?


 
REA ©   (2004-08-03 16:26) [3]

Можно послать сообщение главной форме программы.


 
П7   (2004-08-03 16:28) [4]


> REA ©   (03.08.04 16:26) [3]

Код, пожалуйста, покажите... (:


 
Goffman   (2004-08-03 16:46) [5]


> [2] П7   (03.08.04 16:23)

Нет, ты понял неправильно, но это и не удивительно, раз ты не знаком с интерфесами.
Поищи соотв. статьи здесь или на королевстве.
Например http://www.delphikingdom.com/asp/viewitem.asp?catalogid=468


 
PVOzerski ©   (2004-08-03 17:10) [6]

Да тут можно без всяких COM-технологий обойтись. Просто использовать механизм callback-функций. Пусть программа отдает dll-ке свои callback"и, а уж dll их вызывает. Например, что-то такое:

type
tMyCallBack=function(CmdID:pChar;params:pointer):longbool;stdcall;

procedure AttachCallBack(aCallBack:tMyCallBack);stdcall;
external "myplugin.dll";


 
Goffman   (2004-08-03 17:19) [7]


> [6] PVOzerski ©   (03.08.04 17:10)


Да, но тогда придется регистрировать callback"и в каждой подключаемой dll"ке, хотя если она всего одна...

зы: а про COM  я ничего и не говорил :)


 
PVOzerski ©   (2004-08-03 17:33) [8]

>Да, но тогда придется регистрировать callback"и в каждой подключаемой dll"ке

А что тут такого страшного? Заодно через GetProcAddress можно проверять, является ли данная dll плагином к этой проге.


 
П7   (2004-08-04 09:49) [9]


> PVOzerski ©   (03.08.04 17:10) [6]

Спасибо, идея прикольная. Нужно будет сейчас поэкспериментировать. Собственно таким образом я сейчас проверяю DLL"ки на плагинность моей проги. Ищется процедура в которую параметром передаётся процедура, которая запускается с параметрами, которые содержат названия всех имеющихся процедур в плагине. Надеюсь не очень запутанно написал... (: А вот использовать тот же механизм для передачи команд как-то не догадался. Одно слово - тормоз!!! (:



Страницы: 1 вся ветка

Текущий архив: 2004.08.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.028 c
3-1090927751
Экспериментатор
2004-07-27 15:29
2004.08.22
Как правильно сортировать?


1-1091978593
Mbox
2004-08-08 19:23
2004.08.22
TDirectoryOutLine


14-1091075206
Kerk
2004-07-29 08:26
2004.08.22
skype


14-1091449996
Новичек
2004-08-02 16:33
2004.08.22
Помогите пожалуйста разобраться.


3-1091159310
don-do
2004-07-30 07:48
2004.08.22
Помогите плз. ссылкой или кодом