![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Guest_Михаил |
|
|||
|
Unregistered |
Я пытаюсь на Delphi переделать в DLL текстовый редактор (работающее MDI-приложение!). Выполняю явную загрузку и запускаю. Форма появляется, но при попытке создать форму MDIChild происходит ошибка "Cannot create form. No MDI forms are currently active." и приложение виснет.
Можно ли в DLL помещять MDI формы и как это сделать. С благодарностью, Михаил. |
|||
|
||||
| Medved |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 7209 Регистрация: 15.9.2002 Где: Kazakhstan, Astan a Репутация: 14 Всего: 154 |
Хотелось бы на код посмотреть...
-------------------- |
|||
|
||||
| Dapo |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 417 Регистрация: 18.4.2002 Репутация: нет Всего: 1 |
MDI помещкать в длл можно, а в некоторых случаях нужно. Судя по ошибке, у тебя длл просто не знает про твою MDI-форму или про то, что она MDI. Код, конечно, хорошо бы привести.
|
|||
|
||||
| Mikel |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 882 Регистрация: 30.3.2002 Где: Саратов Репутация: 1 Всего: 2 |
Посмотри в любом dpr'е как формы добавляются в application.
-------------------- ...so remember, it's better to burn out than to fade away |
|||
|
||||
| Vyacheslav |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2124 Регистрация: 25.3.2002 Где: Москва Репутация: нет Всего: 59 |
Я сам по Builder. Но проблема известная и заключается в том, что основное приложение и dll получают каждая свои собственные экземпляры Application. Естественно в Application от dll никаких активных MDI forms не существует, о чем тебе и сообщают.
Самый простой способ решить ее - это линковать основное приложение и dll-ки с включенной обцией Build with runtime package. В этом случае и основное приложение и dll имеют один экземпляр TApplication на двоих. Второй способ более трудоемкий и не очень надежный заключается в подмене Application у dll. После загрузки dll вызови некую свою функцию инициализации (назовем ее условно Init), которой передай ссылку на Application. Эта функция должна запомнить свой собственный экземпляр TApplication и присвоить переменной Application значение, переданной через параметр. Далее можно вызывать остальные функции из dll. Перед выгрузкой dll нужно вызвать еще одну функцию, которая вернет все обратно. Иначе приложение грохнется. Код функции Init привожу на С++, так Object Pascal знаю не достаточно хорошо. extern "C" void __declspec(dllexport) Init(TApplication* ); TApplication* DllApp = NULL; void Init( TApplication* MainApp) { if (!DllApp) { DllApp = Application; Application = MainApp; } } Я лично всегда пользовался первым способом -------------------- С уважением, Вячеслав Ермолаев |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |