![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Плагин
KSV © (2003-02-24 21:12:00)Как сделать плагин в dll? В плагин передается элемент управления (например панель расположенная на основной форме), а плагин ставит на эту панель свои компоненты. Возможно ли такое сделать?
Gandalf (2004-02-29 11:34:00) [1]Memory Mapped Files например
Тема уходит далеко за рамки KOL!
KisaNetik (2004-02-29 02:39:00) [2]Вопрос...
А как можно махатся с плагином данными во время выполнения самого плагина? Или же к примеру выполнять в основной программе что-то по нажатию кнопочки в плагине и вернуть фокус вновь плагину???
ывавыа (2003-07-22 12:11:00) [3]Удалено модератором
Примечание: Грубая лексика
SPeller (2003-03-05 03:10:00) [4]шли на мыло свой код, посмотрим.
KSV (2003-03-04 19:41:00) [5]Извини, ошибся!
Вместо
but:=newform(A,'ser');
надо
but:=newbutton(A,'ser');
SPeller (2003-03-04 06:09:00) [6]Из приведённого кода следует что ты создаёшь форму на панели. А вот кода когда ты делаешь контрол на форме здесь нет. Отсюда и выводы.
KSV (2003-03-03 20:20:00) [7]Форму я создавал не на панели, а отдельно. Тогда все работает нормально. Но если пытаться создать элемент на форме программы, то ошибка.
SPeller (2003-03-03 01:25:00) [8]
> Нет не из-за этого
Проверял?
А то что создаёшь форму на панельке ничего?
KSV (2003-03-02 21:00:00) [9]Нет не из-за этого. Если внутри плугина создавать отдельную форму, то все работает без ошибок. Но если попытаться на чужой форме, то возникает ошибка. Возможно здесь надо делать одинаковыми Applet в основной программе и в плагине. Но я так пробовал тоже выдается ошибка.
SPeller (2003-03-02 16:10:00) [10]Может быть из-за несоответствия
type TPlugCreate=function(value:PControl):byte;stdcall;
и
procedure PlugCreate(A:PControl);stdcall;
??
KSV (2003-03-02 09:19:00) [11]//Основная программа
type TPlugCreate=function(value:PControl):byte;stdcall;
var Panel:PControl; //эта панель создается на форме
procedure BtnPlugCreate(Sender:PControl; var Mouse:TMouseEventData);
var FPointer:TFarProc;
PlugCreate:TPlugCreate;
i:byte;
HInst:THandle;
begin
i:={Sender.Tag}1;
try
HInst:=LoadLibrary(PChar(ProgramDir+'Plugins\'+'my.dll'));
if HInst>0 then begin
FPointer:=GetProcAddress(HInst,PChar('PlugCreate'));
if FPointer<>nil
then begin
PlugCreate:=TPlugCreate(FPointer);
PlugCreate(Panel);
end;
end;
finally
end;
end;
//Библиотека DLL
var but:PControl;
procedure PlugCreate(A:PControl);stdcall;
var P:PControl;
begin
Messagebox(0,'1','1',mb_ok);
but:=newform(A,'ser');
but.Parent:=A;
but.Show;
end;
Процедура нормально вызывается, появляется MessageBox, но
потом происходит ошибка.
Except EAccessViolation in module MY.DLL at 000043A4.
Access violation at address 011843A4 in module 'MY.DLL'. Read of address
FFFFFFFF.
А возможно ли вообще передавать только Handle панели, расположенной на форме, и создавать элементы управления из DLL на ней, чтобы не привязываться к определенному языку программирования?
SPeller (2003-02-26 10:00:00) [12]Приведи код, поглядим что у тебя не получается.
KSV (2003-02-25 20:12:00) [13]Может кто пример даст? Я пробовал в процедуре вызова конструктора, расположенного в dll, передавать Panel, расположенную на основной форме, но при попытке создания VCL на этой панели программа выдает ошибку и завершается.
createvcl(Panel1);
SPeller (2003-02-25 15:16:00) [14]
> Юрец (25.02.03 12:10)
> Слушайте, раз уш про plugins'ы, то как (вообще) осуществить
> (или осуществляется) поддержка Plugin?
> Заранее СПАСИБО!!!
Довольно просто: загружаем dll через LoadLibrary, ищем адрес нужной нам функции и вызываем её. Вот и весь процесс. Ну и потом выгружаем библиотеку.
Юрец (2003-02-25 12:10:00) [15]Слушайте, раз уш про plugins'ы, то как (вообще) осуществить (или осуществляется) поддержка Plugin?
Заранее СПАСИБО!!!
Bartov (2003-02-25 01:23:00) [16]Эксперементируй, нет ничего невозможного.