![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
object`ы в delphi 2009
просто так © (2008-10-13 21:08:00)Ктонибудь компилировал в D2009 проги использующие object`ы?
В конструкторе при вызове objsetup почемуто портятся поля объекта и походу указатель на vmt. далее при вызове любого виртуального метода AV.
Это глюк или так и надо?
Сергей М. (2008-10-15 16:52:00) [81]
> по существу чтонибудь есть?
По существу - в D7 полет нормальный.
Существа в Д2009 я не видел по причине неимения оной.
просто так (2008-10-15 16:48:00) [82]>>Сергей М. [15]
пост достойный мастера! уважаю)), а по существу чтонибудь есть?
>>Object types are supported for backward compatibility only. Their use is not recommended.
зачем нужна такая совместимость, тогда бы уж совсем отказались
Сергей М. (2008-10-15 16:14:00) [83]
> Anatoly Podgoretsky © (15.10.08 16:07) [14]
Дык он уже поди целый проект нахреновертил на этом типе)
Anatoly Podgoretsky (2008-10-15 16:07:00) [84]> просто так (15.10.2008 14:53:13) [13]
Еще в Д7 или раньше было написано
Object types are supported for backward compatibility only. Their use is not recommended.
просто так (2008-10-15 14:53:00) [85]ничем, сделано на object`ах, в 2009 перестало работать, заинтересовался почему
Сергей М. (2008-10-15 14:11:00) [86]
> предложения юзать классы не катит
>
Стесняюсь спросить, на какую из больных мозолей они тебе наступили ?
просто так (2008-10-15 13:44:00) [87]>>icWasya
не ломается [1] или чето другое?
12.0.3170.16989 ломается. до этого было еще 2 ранешних версии, тоже ломалось.
>>sniknik, Германн
Ирония конечно хорошо)). может потрудитесь объяснить что я неправильно делаю? [2] и предложения юзать классы не катит
>>Плохиш
За бочку варенья и пачку печенья - легко.
Плохиш (2008-10-15 11:06:00) [88]
> просто так (14.10.08 23:01) [6]
> Пожалуйста не путайте object`ы и class`ы.
ну-ка, ну-ка, расскажи-ка разницу между ними.
icWasya (2008-10-15 11:02:00) [89]у меня 12.0.3163.16897 - и не ломается
Германн (2008-10-15 01:53:00) [90]
> sniknik © (15.10.08 01:14) [7]
Всё пропало! Гипс снимают! Клиент уезжает!
(с)
sniknik (2008-10-15 01:14:00) [91]> это глюк 2009, в других вериях всё ок
все пропало, KOL "погиб", он то весь на объектах. а никто в конференции kol этого не знает, портируют его под 2009й, пишут, юникод внедряют, и даже не догадываются что он не работает... ;)
просто так (2008-10-14 23:01:00) [92]>> a:= zbasic.initxywh;
>>lst:= TStringList.Create; //или это
Пожалуйста не путайте object`ы и class`ы. в данном примере синтаксически всё верно. это глюк 2009, в других вериях всё ок
sniknik (2008-10-14 22:29:00) [93]> virtual в этом примере только чтоб показать ошибку, но в реальной проге он вообщета нужен.
раз нужен значит нужно что то менять, либо пользоваться только классовыми/статическими методами, и не держать данных в объектах, раз не хочешь их создавать. либо все таки подумать над вызовом.
(может то, что ты показал в 2009 и есть его создание, не к курсе, что там поменяли, но если бы это было правильным то и ошибки не было бы)
sniknik (2008-10-14 22:20:00) [94]> как ни назови, суть с ошибкой не изменится((
суть не в имени, а в вызове.
разницу видишь?
> a.initxywh;
объект не создан, виртуальные методе не инициализированы
и
> a:= zbasic.initxywh;
c названием это просто было бы очевидным
вот что на твой взгляд правильно а что нет
var
lst: TStringList;
begin
lst.Create; //это
lst:= TStringList.Create; //или это
и почему?
просто так (2008-10-14 22:00:00) [95]>>a:= zbasic.initxywh; (имя конструктора create лучше бы смотрелось, имхо)
как ни назови, суть с ошибкой не изменится((
>>в общем либо так должно быть, либо убрать слово virtual из описания процедуры в объекте.
так не должно быть. virtual в этом примере только чтоб показать ошибку, но в реальной проге он вообщета нужен.
если все определения скинуть в один файл, то всё работает((
sniknik (2008-10-14 20:37:00) [96]у меня конечно нет 2009го но
> begin
> a.initxywh;
> end.
там изменили способ вызова конструктора? т.е. того самого метода что инициализирует виртуальные методы.
объект там теперь не нужно создавать типа
a:= zbasic.initxywh;(имя конструктора create лучше бы смотрелось, имхо)
?
в общем либо так должно быть, либо убрать слово virtual из описания процедуры в объекте.
просто так (2008-10-14 11:37:00) [97]zcad.dpr
program ZCAD;
uses
ZBasicVisible;
var
a:zbasic;
begin
a.initxywh;
end.
ZBasicVisible.pas
unit ZBasicVisible;
interface
uses
zguis;
type
pzbasic=^zbasic;
zbasic=object(zgui)
end;
implementation
end.
zguis.pas
unit zguis;
interface
type
zgui=object
test:pointer;
procedure crash;virtual;
constructor initxywh;
end;
implementation
procedure zgui.crash;
begin
test:=nil;
end;
constructor zgui.initxywh;
begin //вот тут при нажатии F7 поле test запартачивается
crash; //тут AV
end;
initialization
end.
вот выдирка с ошибкой