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

Вниз

Подмена Application динамической библиотеки   Найти похожие ветки 

 
МистерТ   (2008-07-11 09:50) [0]

Здравствуйте!
Есть ситуация, приложение и библиотека (.dll), оба созданы в делфи и оба содержат формы. Использоваться будут только в рамках друг друга, перевод на другие языки не требуется.
Как известно экземпляры Application у них разные, в результате окно создаваемое в библиотеке не наследует иконку приложения и вообще, отображается отдельно на панели задач, а хотелось бы и иконку и "стандартное" для форм поведение, т.е. что бы на панели отображалась только главная форма (WinAPI привлекать не хотелось бы, только стандартными средствами VCL).
Для этого при инициализации приложения передаю в библиотеку указатель на Application приложения, а вот дальше такая петрушка:
Вариант 1:
LibForm := TLibForm.Create(MainApp);
MainApp - Application приложения.
Ситуация не меняется. Окно без нужной иконки и появляется на панели задач.
Вариант 2:
// при инициализации
LibApp := Application; //
Application := MainApp; //
...
LibForm := TLibForm.Create(Application); //
LibForm.ShowModal;
FreeAndNil(LibForm);
Application := LibApp;

Окно с нужной иконкой, на панели задач не появляется, но приложение падает при выгрузке библиотеки.
Вариант 3:
// при инициализации
pLibApp := @Application; //
Application := pMainApp^; //
...
LibForm := TLibForm.Create(Application); //
LibForm.ShowModal;
FreeAndNil(LibForm);
Application := pLibApp^;

Окно с нужной иконкой, на панели задач не появляется, не падает, но при выгрузке библиотеки главная форма изчезает, процесс "висит" в диспетчере задач.

Господа, как правильно создать форму из библиотеки (.dll) "привязанной" к Application приложения ?

Заранее благодарю всех за ответы.

З.Ы. .bpl не предлагать.


 
МистерТ   (2008-07-11 09:52) [1]

Что вариант 3 - дурость, знаю.
Но блин запутался в конец уже...


 
Сергей М. ©   (2008-07-11 10:12) [2]


> запутался в конец уже


А проблема-то надуман - просто возьми да собери оба проекта с опцией использования рантайм-пакетов, тогда и никаких прыжков с бубном вокруг общности  Application, Screen и прочих глоб.переменных уровня VCL yt gjnht,etncz)


 
Плохиш ©   (2008-07-11 10:17) [3]


> МистерТ   (11.07.08 09:50)  

http://www.ehow.com/how_2109379_use-forms-dll.html


 
МистерТ   (2008-07-11 10:58) [4]

> Плохиш ©   (11.07.08 10:17) [3]
С хендлом делал, в результате иконка все равно дефолтовая. Поэтому и пытался "подменить" объекты Application.


 
tesseract ©   (2008-07-11 15:04) [5]


> Как известно экземпляры Application у них разные,


У них всё разное, Delphi отлично поддерживает COM - почему бы его не использовать, а не городить ерунды?


 
sniknik ©   (2008-07-11 16:21) [6]

> Использоваться будут только в рамках друг друга
убери dll, она не нужна, никаких выгод только проблемы.



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

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

Наверх




Память: 0.48 MB
Время: 0.011 c
2-1247658555
b/@.
2009-07-15 15:49
2009.09.20
Можно ли поместить на форме графикс поверх винконтрол ?


2-1247574008
worldmen
2009-07-14 16:20
2009.09.20
Активация другой программы программно (вывести на первый план).


15-1248204795
DVM
2009-07-21 23:33
2009.09.20
Расщепление байта на биты


4-1216285879
Alex_C
2008-07-17 13:11
2009.09.20
Управление по COM порту нестандартного оборудования


15-1248119778
DVM
2009-07-20 23:56
2009.09.20
Вопрос по препроцессору С