Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Непонятки с подгружаемыми модулями [D6, Win2k]


Страницы:   1 2

Андрусь ©   (2002-07-19 13:00:00) 

Привет всем! Возник такой вопрос: делаю приложение с подгружаемыми пакетами. В опциях проекта ставлю использование своего пакета. Тогда,если я пишу в главной форме
Form2:=TForm2.Create(Application);,то что лишнее будет прикомпилено к exe файлу?
Чего вообще возник вопрос - просмотрел пример в статье "Подгружаемые модули (plugins) в Delphi " Трофимова Игоря.
Там он старается не использовать инициализацию классов в главной форме,а Манагер классов криэйтит в своём модуле на Initialization. Я тоже так пробовал, но лезут ошибки - нарушение доступа по адресу,видимо из-за того,что TList не просит при криэйте Ownera.
Кто сталкивался с этим посоветуйте как лучше.
Зараннее спасибо всем!


Андрусь   (2002-07-25 17:42:00) [1]

Понимаешь ли,я же писал - ставишь фигурные скобки в одном месте - локализация проблемы - и всё в порядке. Даже не знаю чего делать. Но та штука локальная ошибка - модуль я послал. и как быть....


Skier   (2002-07-25 17:29:00) [2]

>Андрусь
Ну ты дал ! Я же писал "Высылай мне свой предельно упрощённый код" !


Андрусь   (2002-07-25 17:27:00) [3]

Ок щас пошлю - у тебя есть Odacовские компоненты и грид от DevExpress. Если нет,буду обрезать либо сам покоцаешь чтоб скомпилилось.


Skier   (2002-07-25 17:17:00) [4]

>Андрусь
Высылай всё...Что бы программы у меня скомпилилась.


Андрусь   (2002-07-25 17:15:00) [5]

Ок,а что слать. Пошлю 3 модуля:MainForm; BaseModalForm; BaseChildForm.
Поясни как тебе удобней.


Skier   (2002-07-25 16:50:00) [6]

>Андрусь
дык ! по почте шли !


Андрусь   (2002-07-25 16:43:00) [7]

Ок нет проблем!
Буду слать по частям. Чего неясно спрашивай. Если сильно засорять форум будем - можно по аське.
Так вот: есть MDI приложение с дочерними формами в пакетах. Приложение для работы с базой. Доступ к базе через Odac. Чаелды идут от TForm и разделяются на 2 ветви - модальные и немодальные.

TBaseModalForm = class(TForm);
TBaseChildForm = class(TBaseModalForm);

В классе TBaseModalForm я организовываю систему сохранения персональных настроек под юзера. Их я храню в базе. И на FormCreate зачитываю.

Function TBaseModalForm.LoadFormSettings:Boolean;
var user:string;a:array of integer;
Begin
Result:=False;
With MainOraData Do
Begin
Query_Clear(FormOptionsSmQuery,False);
user:=MainOraData.MainOraSession.Username;
End;
SetLength(a,4);
{With MainOraData.FormOptionsSmQuery Do
Begin
AddWhere
("UserName = "+""""+user+""""+"AND FormName = "+""""+Self.Name+"""");
Open;
If RecordCount>0 Then
If Locate("FormItemName",Self.Name,[]) Then
With Self Do
Begin
StrToInt_Arr(FieldByName("InitialData").AsString,a);
Width:=a[0];
Height:=a[1];
Left:=a[2];
Top:=a[3];
Result:=True;
End;}
End;
End;

MainOraData - главный DataModule,где находятся общие компоненты для доступа к базе. Так вроде названия информативные - если не ясно спрашивай.
Если поставить {}там,где они стоят,то всё сработает нормально,если их убрать,то вылетает CPU window с ошибкой.
И ещё прикол. Вкладываю в пакет наследника от TBaseModalForm - ошибки нет. Если - от TBaseChildForm,тогда ошибка.


Skier   (2002-07-25 16:07:00) [8]

>Андрусь
См. Skier © (23.07.02 17:35)
На других условиях я пас...


Андрусь   (2002-07-25 16:05:00) [9]

Уважуемый Skier!
Давайте попробуем ещё раз. Уже который день долблюсь - та же ошибка. Удалось локализовать проблему,но ясности нет.
Зараннее большое спасибо за поддержку.


Андрусь   (2002-07-23 19:59:00) [10]

Уважуемый тов. Skier! Куда же вы пропали.
Смотрю Event Log - не освобождаю что-то в куче.Исходя из написанного выше кода,какие могут быть догадки.

ODS: HEAP: Free Heap block 12cafe0 modified at 12cb188 after it was freed Process Str_Project.exe ($3EC)


Андрусь   (2002-07-23 18:20:00) [11]

Вообще вываливающие CPU window - это от чего. Если нет исходников ошибки?


Андрусь   (2002-07-23 17:44:00) [12]

Я сделал его таким какой тебе присылал.Что конкретно ещё показать.


Skier   (2002-07-23 17:35:00) [13]

>Андрусь
Высылай мне свой предельно упрощённый код.
Иначе мне очень трудно идти на ощупь...


Андрусь   (2002-07-23 17:33:00) [14]

>замени PostMessage на SendMessage !
А смысл.

Думал что-то глобальное предложишь.
Сейчас предельно всё упростил,чтобы было как я описал,без наворотов. Нашел небольшой глюк - судя по всему AV из-за него был.Но особо лучше не стало. При закрытии главной формы вываливает CPU Window. Причем так прикольно - если форму,которая в пакете откроешь больше 2 раз - его не будет.


Андрусь   (2002-07-23 17:16:00) [15]

Попрошу,что-нибудь по существу. Говоришь горбыли я строгаю - подскажи как лучше.


Skier   (2002-07-23 17:16:00) [16]

>Андрусь
замени PostMessage на SendMessage !


Skier   (2002-07-23 17:14:00) [17]

>Андрусь
Да ты прав насчёт WM_MDICHILDDESTROYED я погорячился,
был в полной уверенности что это сообщение объявлено в
Messages.


Андрусь   (2002-07-23 17:08:00) [18]

Обожди,нечего гнать на мою горбушку - как могу так и делаю. То что не доконца всё поясняю - согласен виноват.

const
WM_MDICHILDDESTROYED = WM_USER + 777;

И кстати,скажи мне пожалйста,где эта мессага описана - самому интерестно:искал в unitе Messages - нету.
Так что не надо...

Я же спрашиваю как лучше - знаешь, помоги брату по разуму.


Skier   (2002-07-23 16:52:00) [19]

>Андрусь
А зачем же ты для своего собственного сообщения
используешь, то что уже использует Delphi (WM_MDICHILDDESTROYED)?
Да ещё и без Inherited ! Честно говоря, твой код это вообще
полная горбуха ! (без обид...)


Андрусь   (2002-07-23 16:46:00) [20]

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо