Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Программа и интерфейс
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.02.2008, 15:46
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию Интерфейс Плагин<->Программа

Занимаюсь внедрением плагинов, возникла необходимость в организации интерфейса между плагином и программой, наподобии интерфейса в QIP Infium. Не могу понять алгоритм инициализации плагина...Плагин должен привязываться к своему сервису плагинов в главной программе...в общем нужна помощь
Вот тут SDK QIP'а Помогите плиз...
Ответить с цитированием
  #2  
Старый 29.02.2008, 14:25
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

Неужели никто не знает??? Эт очень важно!!!
Ответить с цитированием
  #3  
Старый 29.02.2008, 15:47
Phedor Phedor вне форума
Начинающий
 
Регистрация: 28.02.2008
Сообщения: 118
Репутация: 21
По умолчанию

В чем проблема?
1. Ищете в папке плагинов файлы с расширением dll
2. Вызываете процедуру (должна быть во всех плагинах) возвращающую информацию о плагине и производящую первоначальную инициализацию.
3. Добавляете полученную инфу в самой программе в список плагинов.
Ответить с цитированием
  #4  
Старый 29.02.2008, 17:11
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
Подмигивание

Если кратко:
Qip загружает dll с твоим плагином и найдя в ней функцию CreateInfiumPLUGIN, вызывает ее
при этом он передает тебе интерфейс для связи с сервером - PluginService: IQIPPluginService
а ты ему свой интерфейс - типа IQIPPlugin
для того чтобы работал твой интерфейс из двух функций предварительно создается объект класса
TQipPlugin.Create(PluginService)
сервер видит только твой интерфейс
PHP код:
IQIPPlugin = interface
  
// сервер получает информацию о плагине
    
function  GetPluginInfopPluginInfostdcall;
  
// сервер вызывает чтобы сообщить плагину о событиях (плагин загружен, запуск плагина, останов и т.д.)
  // смотри реализацию в классе TQipPlugin там все подробно расписано на чистом англицком
    
procedure OnQipMessage(var PlugMsgTPluginMessage); stdcall;
  
end
в своем плагине ты сам пишешь как ты будешь реагировать на событи
в общемто все кроме инициализации, описаний интерфейсов и констант можешь менять

когда ты хочешь чтото сообщить или получить от сервера то используешь его интерфейс
PHP код:
IQIPPluginService = interface
    
// позволяет тебе сохранить или загрузить сохраненные опции
    
function  PluginOptions(DllHandleLongInt): pPluginSpecificstdcall;
    
// посылаешь серверу вообщение на которое он отреагирует
    
procedure OnPluginMessage(var PlugMsgTPluginMessage); stdcall;
  
end
который ты сохранил в
PHP код:
constructor TQipPlugin.Create(const PluginServiceIQIPPluginService);
begin
  FPluginSvc 
:= PluginService;
end

В общем гдето так
удачи
Ответить с цитированием
  #5  
Старый 01.03.2008, 12:21
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

2 s0Creator:
Как делать плагины к квипу я знаю. Я не знаю как организовать подобное в своей проге.
При вызове функции CreateInfiumPLUGIN в нее передается IQIPPluginService, который изначально равен nil, поэтому вылетает ошибка access violation...К тому же возвращается значение типа IQIPPlugin...Поэтому я не знаю, как инициализировать плагин

Последний раз редактировалось KOOL, 01.03.2008 в 12:25.
Ответить с цитированием
  #6  
Старый 01.03.2008, 15:01
Аватар для s0Creator
s0Creator s0Creator вне форума
Местный
 
Регистрация: 20.02.2008
Адрес: Московская область
Сообщения: 420
Репутация: 884
По умолчанию

А ты не заметил как dll передает свой интерфейс
PHP код:
function CreateInfiumPLUGIN(PluginServiceIQIPPluginService): IQIPPluginstdcall;
begin
  Result 
:= TQipPlugin.Create(PluginService);
end
интерфейс это только описание предиставляемых методов
чтоб его передать необходимо создать интерфейсный объект
я вообще делал это так:
PHP код:
if FSQLDriver nil then FSQLDriver := TSQLDriver.Create ;
      
FSQLDriver.GetInterface(ISQLDriver,Result); 
Ответить с цитированием
  #7  
Старый 02.03.2008, 20:11
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

Мда...учиться, учиться и учиться....Спасибо за наставление на истинный путь)))
Ответить с цитированием
  #8  
Старый 03.03.2008, 20:16
Аватар для KOOL
KOOL KOOL вне форума
Активный
 
Регистрация: 06.01.2008
Адрес: Рязань
Сообщения: 306
Версия Delphi: 2009
Репутация: 6150
По умолчанию

Проблемыыы.... Не получается создать класс интерфейсного объекта...По идее в нем должны быть те же процедуры, что и в интерфейсе + свои..но компилятор на этом участке ругается на недекларированную процедуру:
Код:
unit PPlugin

...
IPluginService = interface
    procedure OnPluginMessage(var PlugMsg: TPPluginMessage); stdcall;
  end;
  pIPluginService = ^IPluginService;
...
---------------------------------------------
//основная программа

...
type
    TPluginService = class(TInterfacedObject, IPluginService);//Вот тут ошибка [Error] PlaylistForm.pas(3893): Undeclared identifier: 'OnPluginMessage'
      public
        procedure OnPluginMessage(var PlugMsg: TPPluginMessage); stdcall;
    end;
    pTPluginService = ^TPluginService;

procedure TPluginService.OnPluginMessage(var PlugMsg: TPPluginMessage);
begin
//...
end;
...

Последний раз редактировалось KOOL, 03.03.2008 в 20:37.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:45.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter