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

Вниз

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

 
gemini ©   (2005-08-08 13:50) [0]

Здравствуйте.

У меня вопрос в следующем:

Существуют 2 DLL разработанные мной. В каждой из них есть модуль в котором описан класс.

type
 TDLLMenuItem =class(TMenuItem)
   constructor Create(Owner:TComponent; Caption:String; FormClassName:TClass; FormStyle:TFormStyle);
   procedure OnClickNew(Sender: TObject);
 private
   FormClassName:TClass;
   FormDLL:TForm;
   FormStyle:TFormStyle;
 public
 end;

implementation

constructor TDLLMenuItem.Create(Owner:TComponent; Caption:String; FormClassName:TClass; FormStyle:TFormStyle);
begin
 inherited Create(Application);

 self.Name := "ItemDatabaseDirectorys_" + FormClassName.ClassName;
 self.Caption := Caption;
 self.OnClick := self.OnClickNew;

 self.FormClassName:=FormClassName;
 self.FormStyle := FormStyle;
end;

procedure TDLLMenuItem.OnClickNew(Sender:Tobject);
begin
 FormDLL := TForm(TComponentClass(FormClassName).Create(Application));
 FormDLL.FormStyle :=FormStyle;

 case integer(FormDLL.FormStyle) of
   1: begin
         FormDLL.WindowState := wsMaximized;
         FormDLL.Show;
     end;

 end;

При инициализации библиотеки ( каждой) создается экземпляр класса

DLLMenuItem:=TDLLMenuItem.Create(Application, <Caption Item>, <Класс формы прикрепленной к создаваемому Item>, fsMDIChild);

<Класс формы прикрепленной к создаваемому Item> класс формы разный в каждой библиотека.
Application ,берется из главного приложения.

Все создается замечательно. Таким образом я реализовал интерфейс управления формами находящимися в DLL-ках.

Проблема возникает когда кликаешь на элементе меню. На каком бы из них не кликнул, вызывается форма из первой подгруженной DLL. В отладчике видно что при клике мы всегда попадаем в один и тот же обработчик OnClickNew в одной и той же DLL.
Хотя обьекты то разные????? Или я что-то не улавливаю? Буду признателен за идеи. Bpl не предлагать ж).


 
evvcom ©   (2005-08-08 13:56) [1]


> Таким образом я реализовал интерфейс управления формами
> находящимися в DLL-ках.

Сильно сказано.
Подобная идея обречена на глюки. Лень разбираться, почему вызывается именно "первая форма", но даже если и разобраться, то рано или поздно выплывут другие глюки.


 
just_me   (2005-08-08 14:21) [2]

Bpl не предлагаю, но вот собрать все с runtime packages настоятельно советую


 
Slym ©   (2005-08-08 14:57) [3]

Значит ошибка не в этом коде, а там где ты подгружаешь dll, создаешь менюшки


 
gemini ©   (2005-08-08 15:27) [4]

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

Нет такого понятия ,обреченность. Есть понятие реализуемо и не реализуемо.


 
Digitman ©   (2005-08-08 15:55) [5]


> gemini ©   (08.08.05 15:27) [4]


отладчик что говорит ?


 
evvcom ©   (2005-08-08 16:05) [6]


> Нет такого понятия ,обреченность. Есть понятие реализуемо
> и не реализуемо.

Ну, ну... Реализуемо теоретически почти все :), на практике все гораздо сложнее. Почему я использовал слово "обречена"? Потому что многие могут начать стучать себя кулаками в грудь и доказывать, что они подменили Application, Screen и прочие объекты во всех используемых dll, и что все у них прекрасно работает. Да, в некоторых ситуациях это действительно работает. А в некоторых (с которыми они просто не столкнулись) это работать не будет. Отсюда и обречение.


 
gemini ©   (2005-08-08 16:17) [7]

2 Digitman ©

Приотладке находясь в exe элементы имеют разные имена и адресa для click. На деле же при входе в dll заход осуществляетс явсегда в процедуру обработки в первой dll. Процедура выполняется отлично. Форма открывается. Что интересно то в Click() переменная self имеет уже параметры именно менюайтема из первой dll, хотя кликали по второй. Вот такие пироги ж(


 
Slym ©   (2005-08-08 16:22) [8]

Ага и адреса процедур что-то прыгают...
Ошибка не в приведеном коде! а в не приведеном


 
Digitman ©   (2005-08-08 16:23) [9]


> при входе в dll


что такое "вход в dll" ?


 
gemini ©   (2005-08-08 16:41) [10]

Могу выложить пример. При входе в DLL это значит когда я отладчиком ставлю brp в 1 и во 2 dll заход всегда по первой.

Вот и узнать бы где они прыгают. ж(


 
Mx ©   (2005-08-08 18:14) [11]

Я что-то не пойму, если DLL имеют один и тот же модуль, то как можно определяется, что вызывается обработчик именно из первой DLL?



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

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

Наверх




Память: 0.49 MB
Время: 0.14 c
1-1123398075
kami
2005-08-07 11:01
2005.08.28
Непонятки с датами файлов


14-1122964944
3DxFantastika
2005-08-02 10:42
2005.08.28
Магия - есть ли сабж?


11-1106119944
Ajax
2005-01-19 10:32
2005.08.28
Default button


1-1123670582
ANB
2005-08-10 14:43
2005.08.28
Как избавится от порчи большого текста в TRichEdit


3-1121673729
Juice
2005-07-18 12:02
2005.08.28
Дата и диалект ?