Форум: "Основная";
Текущий архив: 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.045 c