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

Вниз

О 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.038 c
4-1117006096
msd
2005-05-25 11:28
2005.08.28
COM порт


14-1122917306
Starcom
2005-08-01 21:28
2005.08.28
Своя прога для обновления прошивки CD/DVD-R/RW?


14-1122991707
Antonn
2005-08-02 18:08
2005.08.28
Как родился Вася Пупкин?


3-1121360879
Sam Stone
2005-07-14 21:07
2005.08.28
Формат даты


6-1116154204
Creo
2005-05-15 14:50
2005.08.28
Програмный выбор сетевого подключения.





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