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

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.046 c
15-1178778014
db2admin
2007-05-10 10:20
2007.06.03
Подскажите пожалуйста литературу по Топографии


2-1179058680
Просто_новичок
2007-05-13 16:18
2007.06.03
Частое обращение к жёсткому диску.


6-1164304410
flaxe
2006-11-23 20:53
2007.06.03
EmbeddedWB1 и idHTTP1


2-1179107919
Ale][andr
2007-05-14 05:58
2007.06.03
INIFILES


3-1173587325
O.O
2007-03-11 07:28
2007.06.03
Большие числа int64/LargeInt