![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сенсация! Код initialization может не выполнятся! [D7, Win2k, WinXP]
MikProg © (2006-07-11 21:37:00)Написана прога. С целью сериализации в секции initialization семи унитов регистрируется описанные в них классы через registerclass. Фенька в следующем: у меня программа работает, у клиента нет. Вставленные в секцию инициализации отладочные строки для записи в файл пишут лог в порядке инициализации модулей. В логе запуска на моей машине (XP и Win2k) отметился каждый из 7 модулей. В логе запуска того же экзешника у клиента (Win2k) отметились тольк 3 из 7 модулей !!! Это полный трындец! Я понимаю что могу грубо регистрировать классы где нибудь в одном месте, но это есть покушение на устои! Кто нибудь может объяснить?
Сергей М. (2006-07-12 14:46:00) [61]
> MikProg © (12.07.06 14:44) [51]
Комментируй хоть самого господа бога? но я рекомендую вникнуть в RTTI.
MikProg (2006-07-12 14:44:00) [62]
> хоть как-то намекало бы на суть твоей проблемы ..
В ожидании полезныхсведений я пока закомментировал RegisterClipboardFormat и жду вестей от клиента.
StriderMan (2006-07-12 14:42:00) [63]
> Aplication.OnException, в нем ту же LogRecord() с выводом
> текста ошибки
> Достоверней чем что? Типа глобальный ExceptionHandler рантайма
> еще не готов?
initialization в модулях выполняется еще до Application.Initialize, а именно на первом beginв проекте. Поэтому если там произойдет исключение, никакой Application.OnException ничего не поймает.
ЗЫ: Только что испытал
sniknik (2006-07-12 14:40:00) [64]Игорь Шевченко © (12.07.06 13:53) [38]
> отсюда резонный вопрос - какая разница, указывать const или не указывать ?
для контроля "себя любимого". хотя честно не знал, что оптимизатор стал таким умным. всегда писал (и буду скорее всего ;).
Сергей М. (2006-07-12 14:36:00) [65]
> MikProg © (12.07.06 14:09) [40]
> никто не удосужился посмотреть
Поясни нам, валенкам, что мы должны были увидеть в этом коде такого, что хоть как-то намекало бы на суть твоей проблемы ..
StriderMan (2006-07-12 14:25:00) [66]
> StriderMan © (12.07.06 14:15) [44]
> рекомендую обернуть код в INITIALIZATION в try..finally
> и в finally писать в лог. так достовернее будет.
а еще лучше так
try
...
except
//пишем ошибку
end;
// пишем что все ОК
MikProg (2006-07-12 14:23:00) [67]
> рекомендую обернуть код в INITIALIZATION в try..finally
> и в finally писать в лог. так достовернее будет.
Достоверней чем что? Типа глобальный ExceptionHandler рантайма еще не готов?
MikProg (2006-07-12 14:20:00) [68]
> Насколько я понял такие юниты у тебя есть.
Придется, наверное, но не хочется (как не хочу и регистрировать классы где нибудь кроме initialization) - все они кандидаты на сборку в две-три библиотеки содержащие классы разных уровней иерархии.
StriderMan (2006-07-12 14:15:00) [69]рекомендую обернуть код в INITIALIZATION в try..finally и в finally писать в лог. так достовернее будет.
Суслик (2006-07-12 14:13:00) [70]автору
ты бы все-таки указал в списке юнитов проекта (он, насколько я понял, у тебя один - никаких пакетов) все юниты, которые ты в том числе неявно используешь.
Насколько я понял такие юниты у тебя есть.
Суслик (2006-07-12 14:13:00) [71]автору
ты бы все-таки указал в списке юнитов проекта (он, насколько я понял, у тебя один - никаких пакетов) все юниты, которые ты в том числе неявно используешь.
Насколько я понял такие юниты у тебя есть.
Суслик (2006-07-12 14:13:00) [72]автору
ты бы все-таки указал в списке юнитов проекта (он, насколько я понял, у тебя один - никаких пакетов) все юниты, которые ты в том числе неявно используешь.
Насколько я понял такие юниты у тебя есть.
MikProg (2006-07-12 14:09:00) [73]
> И что же там "криминального" творится, по-твоему ?
Ничего. Просто никто не удосужился посмотретькод, а рассуждений...
isasa (2006-07-12 14:08:00) [74]Юрий Зотов © (12.07.06 12:45) [33]
Ох, и не дурак же он, этот компилятор.
Так это, я тут напрягся и вспомнил, что передача параметра по значению еще со времен Турбо-Паскаля - только то, что меньше или равно длине регистра. :)
Остальное, все равно, по ссылке.
Игорь Шевченко (2006-07-12 13:53:00) [75]
> Ох, и не дурак же он, этот компилятор.
Об том и речь. В изначально приведенном примере строка не модифицируется, отсюда резонный вопрос - какая разница, указывать const или не указывать ?
Сергей М. (2006-07-12 13:43:00) [76]
> MikProg © (12.07.06 13:41) [36]
И что же там "криминального" творится, по-твоему ?
MikProg (2006-07-12 13:41:00) [77]Мммда. А никто не хочет узнать что творится в IGGPaintBoxControls?
unit IGGPaintBoxControls;
initialization
LogRecord('IGGPaintBoxControls start');
RegisterClass(TFrameMembers);
CF_IGGControls:=RegisterClipboardFormat('IGG2Controls');
LogRecord('IGGPaintBoxControls end');
finalization
end.
Юрий Зотов (2006-07-12 13:10:00) [78]> han_malign © (12.07.06 12:56) [34]
Естественно, раз приходит оригинал.
han_malign (2006-07-12 12:56:00) [79]
> Кстати, о птичках.
- я пошел дальше и вывел RefCount - он увеличивается в WithoutVarAndConst... :)
han_malign (2006-07-12 12:45:00) [80]OFFTOP
> Создается копия строки - а зачем, если она не нужна? Впустую тратится время, впустую тратится память.
- вот уж от кого, а от вас(тебя) не ожидал...
{$H+}
Copy on change