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

Вниз

Запутался с показом немодальной формы из DLL   Найти похожие ветки 

 
Ketmar ©   (2006-10-24 08:14) [40]

>[39] DmiSb 24-Oct-2006, 08:03
>программа и ДЛЛ компиляться с пакетами.
>Это не выход.
отчего?

>Задача разбить программу на модули
и всенепременно динамически подгружаемые? может, тогда проще Оберон взять? %-)


 
DmiSb   (2006-10-24 08:35) [41]

Ну хорошо, сдаюсь.
Может быть это была не самая лучшая мысль сделать программу с ДЛЛ,
но задача стояла следующая :
Программа должна уметь обновлять сама себя через Инет (VPN сеть). Используя ДЛЛ, её можно выгрузить, скачать новую, и загрузить.
Может кто подскажет, как это сделать красивее ?


 
Ketmar ©   (2006-10-24 08:36) [42]

пакетами?


 
DmiSb   (2006-10-24 08:42) [43]

> пакетами?
В смысле ?


 
Ketmar ©   (2006-10-24 08:44) [44]

>[43] DmiSb 24-Oct-2006, 08:42
>> пакетами?
>В смысле ?
Borland сделали пакеты. Borland позволили пользователям делать пакеты. Borland дали для этого инструмент, которым пользовались сами.


 
Slym ©   (2006-10-24 08:54) [45]

модули компиль в пакеты :)


 
DmiSb   (2006-10-24 09:06) [46]

Но тогда пакеты будут грузиться сразу ?


 
metalfan ©   (2006-10-24 09:11) [47]


> DmiSb   (24.10.06 09:06) [46]

с чего бы это?
http://delphiworld.narod.ru/base/little_about_plugins.html


 
DmiSb   (2006-10-24 09:46) [48]

Да действительно.
И как я на эту статью раньше не наткнулся.
Интересно пообщаться с тем, кто реально использовал эту методику.


 
DmiSb   (2006-10-25 07:49) [49]

>с чего бы это?
>http://delphiworld.narod.ru/base/little_about_plugins.html

Зы.....
У меня кстати не удалось повторить подвиг автора  :-(

Если не делать Register(какой-либо класс),
функция GetClass(какой-либо класс) выдает nil


 
Сергей М. ©   (2006-10-25 08:55) [50]


> DmiSb   (25.10.06 07:49) [49]



> Если не делать Register(какой-либо класс),
> функция GetClass(какой-либо класс) выдает nil


Что в этом удивительного ?


 
DmiSb   (2006-10-25 09:18) [51]

> Что в этом удивительного ?

Получается что ссылка на модуль с формой, которую я хочу хранить в пакете, должна быть в моем приложениии. И я так понимаю форма попадет в приложение, только в виде пакета ? Где же тогда, модульность ?

Или я не правильно понял ?

Сейчас пробую еще один путь, показанный в
http://www.codingclub.net/index.php?go=Articles&in=view&id=183

О форме, которая лежит в .bpl, основное приложение ничего не знает.
Методом TFormLoader FindClassByName(".....") класс формы определяется достаточно легко, я его только вынес в puplic секцию.


 
metalfan ©   (2006-10-25 09:25) [52]


> Методом TFormLoader FindClassByName(".....") класс формы
> определяется достаточно легко, я его только вынес в puplic
> секцию.

кого куда вы вынесли?!


 
Юрий Зотов ©   (2006-10-25 09:58) [53]

> DmiSb   (25.10.06 07:49) [49]

unit MyInterfaces; // Используется EXE и всеми DLL.
type
 IMyInterface = interface
   procedure Method1(...);
   function Method2(...): ...;
   ...
еnd;

unit MyPluginForm; // Используется какой-то DLL
uses
 MyInterfaces;

 TPluginForm = class(TForm, IMyInterface)
 ...
 end;

procedure GetMyInterface:  IMyInterface; stdcall; // Экспортируется из DLL
begin
 Result := TPluginForm.Create(...) as IMyInterface
end;


И это все. Модуль EXE знает, где лежат плагины (DLL или BPL). Он знает, что каждый из них экспортирует функцию GetMyInterface, а та возвращает ссылку на интерфейс IMyInterface. Еще он знает, какие методы этот интерфейс имеет, для чкго они нужны и как их вызывать.

А больше ему и знать ничего не нужно. Его не интересует ни класс, который реализует этот интерфейс (поэтому не требуется никаких RegisterClass), ни способ реализации, ни даже язык, на котором эта DLL написана.

Exe грузит плагин (LoadLibrary), вызывает его функцию GetMyInterface (GetProcAddress), получает ссылку на интерфейс IMyInterface - а далее просто вызывает методы этого интерфейса. Тогда и такие, когда и какие ему нужны. Остальное делает плагин, а КАК он это делает - для Exe неважно.


 
Ketmar ©   (2006-10-25 10:24) [54]

>[53] Юрий Зотов(c) 25-Oct-2006, 09:58
offtopic: Юрий, вы решили учить нас личным примером? (это я намекаю на "ламеров второго рода") нам-то вряд ли поможет, но вопрошающим крупно повезло. многие даже не понимают, как им повезло... (без иронии)


 
Юрий Зотов ©   (2006-10-25 11:51) [55]

> Ketmar ©   (25.10.06 10:24) [54]

Ага-а, значит, прочитал все-таки... и задумался-таки?

Это есть гуд.
:о)

А насчет "не понимают" - потом поймут. Не скоро. А тогда, когда станут готовы к такому пониманию.

Это и есть главное. Понимаешь?
:о)


 
DmiSb   (2006-10-25 11:54) [56]

>[54]
Да я собственно даже на "второго рода" не претендую.
У меня такая задача первая.

>[53]
> procedure GetMyInterface:  IMyInterface; stdcall; // Экспортируется из DLL
> begin
>   Result := TPluginForm.Create(...) as IMyInterface
> end;

Я так понял, этот подход работает в DLL, потому как в BPL "as IMyInterface" не компилиться. И еще мне тут [31], [32] сильно советовали отказаться от форм из DLL. Как тогда этот подход можно использовать из BPL ? Может быть есть какая-нибудь литература по интерфейсам ?


 
Сергей М. ©   (2006-10-25 11:59) [57]


> не компилиться


Значит у тебя ошибка в тексте программы.


 
Amoeba ©   (2006-10-25 12:17) [58]

Статьи по рассматриваемому вопросу:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=274
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=468


 
DmiSb   (2006-10-25 12:31) [59]

С этой статьи
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=468
я и начал изучение использования пкетов в качестве плагинов, но ......[49],
а ссылка на исходники в статье битая.

Ладно, буду пробовать дальше....
Всем огромное спасибо


 
Ketmar ©   (2006-10-25 13:13) [60]

>[55] Юрий Зотов(c) 25-Oct-2006, 11:51
>Ага-а, значит, прочитал все-таки... и задумался-таки?
конечно, прочитал. даже осмыслил немного -- в применении к себе. %-)

>Это и есть главное. Понимаешь?
так я ж не к тому, что "бросайте это всё, ведь не оценят и не поймут". вовсе даже наоборот.


 
Наиль ©   (2006-10-25 13:52) [61]

> Ага-а, значит, прочитал все-таки... и задумался-таки?

А можно ссылку на то, от чего Ketmar задумался?
Хочется тоже преобщится к великому.


 
Германн ©   (2006-10-25 16:10) [62]


> А можно ссылку на то, от чего Ketmar задумался?

Ищи в"Потрепаться" про "ламеров второго рода" :-)


 
Ketmar ©   (2006-10-25 16:13) [63]

>[62] Германн(c) 25-Oct-2006, 16:10
>Ищи в"Потрепаться" про "ламеров второго рода" :-)
угу. а то у меня ещё нет полнотекстового поиска в CDM. %-)


 
MetalFan ©   (2006-10-25 18:23) [64]

а что такое CDM?


 
Ketmar ©   (2006-10-25 18:40) [65]

>[64] MetalFan(c) 25-Oct-2006, 18:23
>а что такое CDM?
http://delphimaster.net/view/15-1158621901/



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

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

Наверх




Память: 0.59 MB
Время: 0.06 c
3-1159527050
Sergey13
2006-09-29 14:50
2006.12.03
Оракл. DBLink на саму себя


2-1163275753
vertal
2006-11-11 23:09
2006.12.03
отношение FindDialog к клавише Enter


2-1163229279
#0FFFF
2006-11-11 10:14
2006.12.03
Иконка компонента


2-1163775483
lobach
2006-11-17 17:58
2006.12.03
Текстовый файл


15-1163385443
kidm
2006-11-13 05:37
2006.12.03
Нуж помощь при оброшение к файлу