-
У меня пока 2 конкретных вопроса 1) StrScan - падает нафиг под FPC 2) TObj.Destroy - нестыковка с конструкторами
По п.1 там как-то все понятно - у FPC особо тонкое понимание как надо выходить из ф-ии. Тут конкретное предложение: заменить RET на, например - INC EAX Вроде это единственный RET в ф-иях, не имеющих PAS-версии
По п.2 - мне не все понятно. Все конструктора контролов идут через New, следовательно, завершением должно быть бы dispose ... И что занимательно: так оно и было в "ранних версиях" KOL. Получается, что это сегодняшнее FreeMem не есть древний артефакт, а вновь сделанное. Непонятка, неправильная какая-то. Отсюда вопрос: а что такое случилась, что произошла замена dispose на FreeMem ???
Без понимания причин такового действа, трудно выработать какое-то компромисное решение :( А надо бы.
-
С FPC нужно использовать KOL-CE. Там, кроме этих проблем, исправлено еще много других.
-
Зравствуйте, приехали :)
Вообще-то, меня в большей степени интересуют знания Например, правильно, или нет - использование dipose после new. Может я чего-то недопонимаю - это гораздо страшнее, чем "упавшее приложение".
Если правильно - это один разговор. И надо разбираться далее, пополнять свое образование, например. Если нет, то причем тут конкретное имя ветки - это положено фиксить в ЛЮБОЙ библиотеке. ((btw: да, я помню, первый раз именно на эту проблему мне именно Вы и указали, коллега))
"Много других" - это очень интересно, конечно. Но ведь очень важным является понимание, почему это множество не зафиксено в штатной версии.
Есть зание о какой-то баге => появляется знание о ее фиксинге => проводится фикс этой баги, независимо от ее локализации Как-то мне представляется это более правильным, чем создавать различия не только в использовании WinApi, но и в объеме пофиксенных багов. ИМХО :)
-
> использование dipose после new
sorry - хотел написать "использование FreeMem после New" :)
-
Использование FreeMem после New является хаком. Это сделано, чтобы не производилась финализация полей типа строка итд при уничтожении объекта. Это экономит какое-то количество байт кода. В FPC такой хак не работает, поэтому нужно использовать корректную связку New/Dispose.
Портировать исправления назад в основную ветку KOL у меня нет желания. Тем более я отказался от ASM версии в KOL-СЕ...
-
Если "полей типа строка" (а также дин. массивов и прочих управляемых указателей) нет - тогда без разницы, компилятор при этом всё равно заменяет Dispose на FreeMem. Если есть - можно заранее прибить их вручную. Собственно, в некоторых случаях (наследование) их приходится прибивать вручную (это рекомендуется в KOLBook, насколько помню), т.к. управляемые указатели не полностью совместимы с object (автоматически освобождаются поля только последнего уровня наследования).
-
Да, пост [5] относится к Delphi, как в FPC - не в курсе.
-
Ага, понял. Спасибо парни, распояснили.
Однако, Хак - он и в Африке Хак. Грубо говоря корректная работа Хака не гарантирована даже в Дельфи. Выйдет от дяденьки Бормана какой-нибудь супер-пупер-релиз - и сосите фикус в саду у дяди Вани....
Не, Хак - это не правильно. Противоречит профессиональному принципу: Не планируй себе проблемы, попробуй сначала справиться с теми, которые возникнут и без планирования :)
Вот интересно теперь, что на это скажет "начальник транспортного цеха" .......
-
От Борланда наверное уже ничего не выйдет. То что выходит (вроде turbo) - это уже не от него. В любом случае KOL лучше использовать со старыми Delphi, оптимально - версия 6. Для программинга под новые Windows 7 и далее все равно придется от win32 отказываться. Другое дело, помрет ли win32. Что-то сомнительно.
|