Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2009.11.15;
Скачать: [xml.tar.bz2];

Вниз

object`ы в delphi 2009   Найти похожие ветки 

 
просто так   (2008-10-13 21:08) [0]

Ктонибудь компилировал в D2009 проги использующие object`ы?

В конструкторе при вызове objsetup почемуто портятся поля объекта и походу указатель на vmt. далее при вызове любого виртуального метода AV.

Это глюк или так и надо?


 
просто так   (2008-10-14 11:37) [1]

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.


вот выдирка с ошибкой


 
sniknik ©   (2008-10-14 20:37) [2]

у меня конечно нет 2009го но
> begin
>  a.initxywh;
> end.

там изменили способ вызова конструктора? т.е. того самого метода что инициализирует виртуальные методы.
объект там теперь не нужно создавать типа  
a:= zbasic.initxywh; (имя конструктора create лучше бы смотрелось, имхо)
?
в общем либо так должно быть, либо  убрать слово virtual из описания процедуры в объекте.


 
просто так   (2008-10-14 22:00) [3]

>>a:= zbasic.initxywh; (имя конструктора create лучше бы смотрелось, имхо)
как ни назови, суть с ошибкой не изменится((
>>в общем либо так должно быть, либо  убрать слово virtual из описания процедуры в объекте.

так не должно быть. virtual в этом примере только чтоб показать ошибку, но в реальной проге он вообщета нужен.
если все определения скинуть в один файл, то всё работает((


 
sniknik ©   (2008-10-14 22:20) [4]

> как ни назови, суть с ошибкой не изменится((
суть не в имени, а в вызове.
разницу видишь?
> a.initxywh;
объект не создан, виртуальные методе не инициализированы
и
> a:= zbasic.initxywh;

c названием это просто было бы очевидным
вот что на твой взгляд правильно а что нет
var
 lst: TStringList;
begin
 lst.Create; //это
 lst:= TStringList.Create; //или это


и почему?


 
sniknik ©   (2008-10-14 22:29) [5]

> virtual в этом примере только чтоб показать ошибку, но в реальной проге он вообщета нужен.
раз нужен значит нужно что то менять, либо пользоваться только классовыми/статическими методами, и не держать данных в объектах, раз не хочешь их создавать. либо все таки подумать над вызовом.
(может то, что ты показал в 2009 и есть его создание, не к курсе, что там поменяли, но если бы это было правильным то и ошибки не было бы)


 
просто так   (2008-10-14 23:01) [6]

>> a:= zbasic.initxywh;
>>lst:= TStringList.Create; //или это
Пожалуйста не путайте object`ы и class`ы. в данном примере синтаксически всё верно. это глюк 2009, в других вериях всё ок


 
sniknik ©   (2008-10-15 01:14) [7]

> это глюк 2009, в других вериях всё ок
все пропало,  KOL "погиб", он то весь на объектах. а никто в конференции kol этого не знает, портируют его под 2009й, пишут, юникод внедряют, и даже не догадываются что он не работает... ;)


 
Германн ©   (2008-10-15 01:53) [8]


> sniknik ©   (15.10.08 01:14) [7]

Всё пропало! Гипс снимают! Клиент уезжает!
(с)


 
icWasya ©   (2008-10-15 11:02) [9]

у меня 12.0.3163.16897 - и не ломается


 
Плохиш ©   (2008-10-15 11:06) [10]


> просто так   (14.10.08 23:01) [6]
> Пожалуйста не путайте object`ы и class`ы.

ну-ка, ну-ка, расскажи-ка разницу между ними.


 
просто так   (2008-10-15 13:44) [11]

>>icWasya
не ломается [1] или чето другое?
12.0.3170.16989 ломается. до этого было еще 2 ранешних версии, тоже ломалось.

>>sniknik, Германн
Ирония конечно хорошо)). может потрудитесь объяснить что я неправильно делаю? [2] и предложения юзать классы не катит

>>Плохиш
За бочку варенья и пачку печенья - легко.


 
Сергей М. ©   (2008-10-15 14:11) [12]


> предложения юзать классы не катит
>


Стесняюсь спросить, на какую из больных мозолей они тебе наступили ?


 
просто так   (2008-10-15 14:53) [13]

ничем, сделано на object`ах, в 2009 перестало работать, заинтересовался почему


 
Anatoly Podgoretsky ©   (2008-10-15 16:07) [14]

> просто так  (15.10.2008 14:53:13)  [13]

Еще в Д7 или раньше было написано

Object types are supported for backward compatibility only. Their use is not recommended.


 
Сергей М. ©   (2008-10-15 16:14) [15]


> Anatoly Podgoretsky ©   (15.10.08 16:07) [14]


Дык он уже поди целый проект нахреновертил на этом типе)


 
просто так   (2008-10-15 16:48) [16]

>>Сергей М. [15]
пост достойный мастера! уважаю)), а по существу чтонибудь есть?

>>Object types are supported for backward compatibility only. Their use is not recommended.
зачем нужна такая совместимость, тогда бы уж совсем отказались


 
Сергей М. ©   (2008-10-15 16:52) [17]


> по существу чтонибудь есть?


По существу - в D7 полет нормальный.
Существа в Д2009 я не видел по причине неимения оной.


 
просто так   (2008-10-15 16:55) [18]

D6..D2006, FPC последних версий - всё ок, глючит только в D2009


 
Anatoly Podgoretsky ©   (2008-10-15 17:12) [19]

> просто так  (15.10.2008 16:48:16)  [16]

Для совместимости не нужна, а вот для обратной совместимости да, но это относится к временам 1995 года, сколько же можно!
Борланд предупреждал.
Но это дело программиста, он имеет право использовать и молиться, что бы ничего не произошло.


 
Anatoly Podgoretsky ©   (2008-10-15 17:14) [20]

> Сергей М.  (15.10.2008 16:52:17)  [17]

Вроде уже в 2007 какие то подвижки произошли по данной обратной совместимости, вроде как отказались и ничего уже не гарантируют в данном случае. Но точно не могу сказать, тоже не видел 2007, но по этому поводу были сообщения.


 
Сергей М. ©   (2008-10-15 17:16) [21]


> просто так


А соббсно что тебе мешает внимательно изучить под отладчиком поведение компилятора, найти ляп и накатить злую телегу в КодГир ? С аргументами, естественно, в виде листингов с твоими комментариями ?


 
просто так   (2008-10-15 17:31) [22]

>>Сергей М.
знаний маловато)), попытался ковыряться - помоему информация о типе по которой его инициализирует objsetup в этом случае неверная


 
Sapersky   (2008-10-15 18:22) [23]

все пропало,  KOL "погиб", он то весь на объектах. а никто в конференции kol этого не знает, портируют его под 2009й

В KOL, кстати, объекты создаются динамически как New(<указатель_на_объект>, <имя_конструктора>). _ObjSetup при этом вызывается тоже, но, возможно, правильнее определяется размер объекта (SizeOf(поля) + 4 на VMT). А статическое объявление компилятор (предположительно) считает просто record"ом с размером SizeOf(поля).


 
просто так   (2008-10-15 18:38) [24]

если в [1] заюзать new - ошибка остается


 
просто так   (2008-10-15 18:43) [25]

работает нормально только если все объявления собрать в одном файле


 
Anatoly Podgoretsky ©   (2008-10-15 18:54) [26]

> Сергей М.  (15.10.2008 17:16:21)  [21]

Ничего не мешает, а смысл, если еще 13 лет назад предупредили.


 
DrPass ©   (2008-10-16 02:34) [27]

Непонятно только, зачем предупреждать и что-то там убирать? Возможность создавать статические объекты в языке в общем-то никому не мешала. Да, понятное дело, сейчас можно удобрять методами и обычные записи. Но все равно... наследование, полиморфизьм и прочие радости ООП.


 
Германн ©   (2008-10-16 03:16) [28]


> DrPass ©   (16.10.08 02:34) [27]
>
> Непонятно только, зачем предупреждать и что-то там убирать?
>

Насорил - убери!
А сабж при всех "высказанных", мне всё равно не понятен.
Примите и прочь!


 
просто так   (2008-10-16 10:48) [29]

дядя Германн
>>Насорил - убери!
Т.е. объекты - мусор? с них вообщето ооп начиналось, классы не всегда удобнее - хотябы потомучто они только по ссылке
>>А сабж при всех "высказанных", мне всё равно не понятен.
>>Примите и прочь!
Мне ваш пост тоже непонятен. зачем попусту клаву аммортизировать?
Где в хелпе написано что object не поддерживается? ключевое слово оставлено, более того всё вроде компилируется, но не работает как надо, это глюк компилятора, а не окончание поддержки.


 
просто так   (2008-10-16 10:58) [30]

вот рекорды с методами - мусор)) будет весело если через пару версий они станут «deprecated»


 
Anatoly Podgoretsky ©   (2008-10-16 12:13) [31]

> просто так  (16.10.2008 10:58:30)  [30]

Как раз рекорды с методами и пришли на замену object


 
Сергей М. ©   (2008-10-16 12:26) [32]


> классы не всегда удобнее - хотябы потомучто они только по
> ссылке


А какая тебе разница, по ссылке или не по ссылке ?


 
sniknik ©   (2008-10-16 12:47) [33]

> классы не всегда удобнее - хотябы потомучто они только по
> ссылке
а мне вот до сих пор не понятно, как в статическом объекте, в данных екзешника, будет меняться  виртуальный метод...?
т.е. странно не то, что не работает, странно то что раньше работало... (проверил в D7, действительно идет),
имхо, думаю это своего рода обман от компилятора, который виртуальные методы делает статическими. 2009-м же просто стал "честнее" :).


 
просто так   (2008-10-16 12:52) [34]

например нужен array [0..много], нафиг мне массив ссылок?


 
Сергей М. ©   (2008-10-16 12:54) [35]


> нафиг мне массив ссылок?


А нафих тебе массив стат.записей ?


 
просто так   (2008-10-16 12:57) [36]

>>sniknik
абсолютно также как с классом, тотже vmt, все честно, никакого мошенства))


 
просто так   (2008-10-16 13:04) [37]

>>Сергей М
надо. А нафих ты меня спрашиваешь?
программа - небольшой векторный редактор. например объект точка (2 координаты - 8 байт на объект) делать под него класс? ему будет жирно, рекорд - мне будет неудобно. помоему object разумный компромис


 
Сергей М. ©   (2008-10-16 13:12) [38]


> делать под него класс? ему будет жирно


Вот я и спрашиваю, почему ему будет жирно, а тебе, напротив, неудобно ?
Конкретные аргументы приводи..


 
просто так   (2008-10-16 13:21) [39]

наплимер массив таких точек\классов пожрет дополнительно 50% от своего размера под указатели + создание каждого объекта динамически. незнаю как вас, а меня совесть мучает, я лучше 1 раз память выделю и какнить обойдусь без ссылок.

с рекодами - совесть спокойна, но мозгу хочется плюсов ооп, трудно без наследования, полиморфизма и прочих прелестей


 
sniknik ©   (2008-10-16 13:38) [40]

> абсолютно также как с классом, тотже vmt, все честно, никакого мошенства))
ну да, конечно...
виртуальные методы определяются на этапе создания конструктором. где создание статического объекта? что у него делает "конструктор", если он не "конструирует"?



Страницы: 1 2 3 вся ветка

Форум: "Основная";
Текущий архив: 2009.11.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.006 c
15-1252932944
SP
2009-09-14 16:55
2009.11.15
Математическая задачка


2-1254421987
Семён. А
2009-10-01 22:33
2009.11.15
Как модифицировать функцию? + Array


15-1253260856
Empleado
2009-09-18 12:00
2009.11.15
О веб сайтах


15-1252931163
нуб
2009-09-14 16:26
2009.11.15
HDD ежесекундно тревожат.


1-1224835215
@!!ex
2008-10-24 12:00
2009.11.15
BMP выравнивание относительно чего?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский