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

Вниз

MDI in DLL   Найти похожие ветки 

 
Feds   (2007-04-02 14:10) [0]

День добрый!
Сталкнулся с проблемой и никак не могу решить!
Ситуация. Создал МДИ-форму, положил ее в ДЛЛ. Подгружаю Длл. Создаю форму. Форма создается. Все работает. НО!
как бы не передается полностью ей управление. т.е. таб бегает по контролам главной форме, хотя активно мое МДИ окно.
В чем может крыться подвох?


 
Feds   (2007-04-03 07:57) [1]

может быть от того что кроме присвоения Application := TApplication(App);
нужно скрин присваивать еще  Screen := TScreen(Scr);??
Scr, App - скрин и апликатион главной формы


 
Сергей М. ©   (2007-04-03 08:48) [2]


> Feds



> Сталкнулся с проблемой и никак не могу решить


Проблема сама собой рассосется, если разместить форму в BPL и собрать оба проекта (ЕХЕ и BPL) с установленной опцией Build With Run-Time Packages


 
Feds   (2007-04-03 09:01) [3]

Да да, я тоже это предполагал..... Но много пересобирать придется... С Длл никак не решается чтоль?


 
Сергей М. ©   (2007-04-03 09:05) [4]


> много пересобирать придется


Лучше один раз пересобрать все взаимодействующие проекты, чем создавать себе проблемы и потом героически их преодолевать.


 
Lex3912   (2007-04-03 09:28) [5]

Поставил галку на билд виз рантайм пакадж на екзешнике и длл таб заработал. Почему?


 
Сергей М. ©   (2007-04-03 09:57) [6]

Потому что RTL у ЕХЕ и DLL стала общая.


 
Feds   (2007-04-03 11:36) [7]

Дык придется бпл так за собой таскать.... неужели никак не решается проблема при использовании Длл и без такой компиляции?


 
Сергей М. ©   (2007-04-03 11:39) [8]


> Дык придется бпл так за собой таскать


а dll разве не придется с собой таскать ? Ты ее, эту свою dll, зачем тогда разрабатываешь, если не "таскать" ?)


 
Lex3912   (2007-04-03 12:37) [9]

Вылез такой косяк - есть две длл, обе и екзешник компилим с пакаджами. При вызове их возникает ошибка что класс ХХХ уже зарегестрирован и существует. Как это обрулить?


 
Сергей М. ©   (2007-04-03 12:47) [10]


> Как это обрулить?


"Обрулить" оч просто - убрать к чертям дублирование декларации одного и того же класса в более чем одном из взаимодействующих модулей, обращающихся к этому классу.


 
Lex3912   (2007-04-03 13:13) [11]

Так скорее всего не получится, потому как длл компилится не будет. Ругается в частности на TcxRect.


 
Lex3912   (2007-04-03 13:26) [12]

Обе длл используют сх-компаненты. Соответсвенно в uses имеют один и тот жде модуль с этим класом.


 
Сергей М. ©   (2007-04-03 13:36) [13]


> длл компилится не будет


Это как ?

С луны готовая свалится что ли ?)


 
Сергей М. ©   (2007-04-03 13:38) [14]


> Обе длл используют сх-компаненты


Да по барабану что они используют)

Важно что они декларируют !


 
Lex3912   (2007-04-03 13:43) [15]

я возможно покажусь тормозом, но где они деклариуются? откуда вырезать?


 
Lex3912   (2007-04-03 13:50) [16]

т.е. я создал 2 длл. поместил туда форму. на форме разместил сх-компонент. скомпилировал с ран-тайм. и при загрузке обоих длл получаю эту ошибку...


 
Lex3912   (2007-04-03 13:54) [17]

я сам руками нигде не прописывал регистрацию классов....


 
Сергей М. ©   (2007-04-03 13:59) [18]

"поместил туда форму" = декларировал класс формы !


> я сам руками нигде не прописывал регистрацию классов


Регистрация декларированного тобой класса в RTTI происходит в ран-тайм, т.е. при загрузке модуля.


 
Lex3912   (2007-04-03 14:09) [19]

ну... дык как получается быть с использованием одного и тогоже класса компонента в двух разных длл, одноврменно подгружаемых? Не понимаю. Так как я использую компонент, класс нужен в обоих длл.. Каким образом чего объявляется в таких ситуациях?


 
Сергей М. ©   (2007-04-03 14:14) [20]

Тебе уже сказано - пользуй пакеты (bpl), там под твои задачи "заточено" все.


 
vl_chel ©   (2007-04-03 15:25) [21]

Если хотите нормально экспортировать форму из dll то в нее надо передать Application.Handle приложения и связать с объектом Application который в dll
А для MDI Child (наверное) нужно передать Handle MDI главного окна
и не забыть все востановить при выгрузки dll


 
Сергей М. ©   (2007-04-03 15:32) [22]


> vl_chel ©   (03.04.07 15:25) [21]
>
> Если хотите нормально экспортировать форму


dll не экспортирует никаких "форм".
dll экспортирует именованые и/или индексированные адреса.
Точно так же как и bpl - разницы никакой.


 
vl_chel ©   (2007-04-03 15:39) [23]

>>Ситуация. Создал МДИ-форму, положил ее в ДЛЛ. Подгружаю Длл. Создаю форму. Форма создается. Все работает. НО!

А как это называеться?


 
Сергей М. ©   (2007-04-03 15:48) [24]

Это называется "вызываю некую ф-цию, которую экспортирует моя dll".


 
vl_chel ©   (2007-04-03 16:19) [25]

Но при создании окна через класс TForm, экземпляр окна регистрируется в объекте Application. Эти экземпляры для библиотеки и приложения разные, форма будет нормально создаваться, в принципе корректно работать до тех пор пока ее модель поведения не пересекается с другими формами приложения, поэтому и надо согласовывать работу экземпляров Application. Для MDI приложений это намного сложнее - в свое время изза этого отказался от этой архитектуры.

В классической литературе (Том Сван, Тексейра) вызов функции библиотеки, создающей экземпляр TForm и называется "экспортом формы из библиотеки"


 
Сергей М. ©   (2007-04-03 16:22) [26]


> при создании окна через класс TForm, экземпляр окна регистрируется
> в объекте Application


Чавой-то ?

Цитируй код ..


 
vl_chel ©   (2007-04-03 16:37) [27]

Sorry в Screen

constructor TCustomForm.CreateNew(AOwner: TComponent; Dummy: Integer);
begin
 inherited Create(AOwner);
.........
 Screen.AddForm(Self);
end;

procedure TScreen.AddForm(AForm: TCustomForm);
begin
 FCustomForms.Add(AForm);
 if AForm is TForm then
 begin
   FForms.Add(AForm);
   Application.UpdateVisible;
 end;
end;


 
Сергей М. ©   (2007-04-03 16:41) [28]

Ну и чаво ты этим кодом хотел сказать ?

Ну да, ну любой объект-наследник TForm тем самым заносится в упомянутый список...

и чаво ?

И это - "регистрация класса" называется ?


 
Frozzen   (2007-04-04 06:07) [29]

Действительно наверно выход переход на бпл. С длл все непросто там с классами выходит



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

Форум: "Основная";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.046 c
4-1167294371
iXT
2006-12-28 11:26
2007.06.03
WinNT Accounts


15-1178201448
Root.Square.Root
2007-05-03 18:10
2007.06.03
Элементарно!


2-1179143083
Пун
2007-05-14 15:44
2007.06.03
как обратиться к столбцу?


1-1175838763
atruhin
2007-04-06 09:52
2007.06.03
Не приходит событие OnActivate


3-1173464796
databaser
2007-03-09 21:26
2007.06.03
Поиск в найденном





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский