Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.09.20;
Скачать: [xml.tar.bz2];

Вниз

Подмена 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.004 c
2-1247662840
dmitry_12_08_73
2009-07-15 17:00
2009.09.20
Подключение компонентаTWebBrowser к Internet Explorer


2-1247646301
MZG
2009-07-15 12:25
2009.09.20
Форматирование диска


2-1247549864
Cyberdeity
2009-07-14 09:37
2009.09.20
Корень квадратный


15-1248179677
TUser
2009-07-21 16:34
2009.09.20
Затмение


15-1247580201
Kerk
2009-07-14 18:03
2009.09.20
Задолжность





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский