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

Вниз

Сравнение двух величин TNotifyEvent   Найти похожие ветки 

 
evvcom ©   (2005-09-27 16:41) [40]


> andsin   (27.09.05 15:47) [36]

Ты бы еще размер миллионного массива сравнил бы с адресом его начала! А потом бы Борланду претензии предъявил. :)
LMD АднАзначнА! :-)


 
andsin   (2005-09-27 16:42) [41]

ну долго ты думал...
бомбить будем твой пост [24] что ты там пишешь?
if CompareMem(@Event1, @Event2, SizeOf(TNotifyEvent)) then
а пишешь ты там сравнивать память по адресам, взятым из двух указателей, размер которых, как ты правильно пишешь равен 4, причем сравнивать просишь sizeof(TNotifyEvent) =8 байт.
не наерундил?


 
andsin   (2005-09-27 16:50) [42]

а, к стати, да не наерундил в размерностях, это я действительно зря.
но все равно наедрундил, т.к. Event1 вполне имеет право быть nil. сам понимаешь, что в этом случае будет.


 
Digitman ©   (2005-09-27 16:55) [43]


> andsin   (27.09.05 16:42) [41]



> бомбить будем твой пост [24] что ты там пишешь?


ну рискни)...


> сравнивать память по адресам, взятым из двух
> указателей, размер которых, как ты правильно пишешь равен
> 4, причем сравнивать просишь sizeof(TNotifyEvent) =8 байт


Нет.

Я сравниваю содержимое двух областей памяти, адрес каждой из которых мне вычислит компилятор и размер каждой из которых равен sizeof(TNotifyEvent)=8 байт.

НИКАКИХ TMethod"ов здесь явно не упоминается (как ты и просил собственно в [21])

Но при этом TMethod"ы здесь неявно присутствуют, и быть иначе не может !


> не наерундил?


Где ?!

Тебе уже 40 с лишним постов долдонят. что компилятор резервирует под размещение инф-ции о методе объекта 8 байт !

Те самые 8 байт, что и составляет любая структура типа TMethod !


 
Digitman ©   (2005-09-27 16:57) [44]


> andsin   (27.09.05 16:42) [41]



> бомбить будем твой пост [24] что ты там пишешь?


ну рискни)...


> сравнивать память по адресам, взятым из двух
> указателей, размер которых, как ты правильно пишешь равен
> 4, причем сравнивать просишь sizeof(TNotifyEvent) =8 байт


Нет.

Я сравниваю содержимое двух областей памяти, адрес каждой из которых мне вычислит компилятор и размер каждой из которых равен sizeof(TNotifyEvent)=8 байт.

НИКАКИХ TMethod"ов здесь явно не упоминается (как ты и просил собственно в [21])

Но при этом TMethod"ы здесь неявно присутствуют, и быть иначе не может !


> не наерундил?


Где ?!

Тебе уже 40 с лишним постов долдонят. что компилятор резервирует под размещение инф-ции о методе объекта 8 байт !

Те самые 8 байт, что и составляет любая структура типа TMethod !


 
umbra ©   (2005-09-27 17:01) [45]


> компилятор резервирует под размещение инф-ции о методе объекта
> 8 байт


и 4 из них - указатель на код процедуры, а 4 - на владельца процедуры!

> Form1.OnClick

Form1 - указатель на владельца
OnClick - указатель на код

Приведение типов уже произошло при запуске программы!


 
Digitman ©   (2005-09-27 17:06) [46]


> umbra ©   (27.09.05 17:01) [45]


> владельца процедуры


о боже)..

хрен редьки не слаще)

НЕТ у процедуры никаких "владельцев" !

и быть не может)


 
Digitman ©   (2005-09-27 17:10) [47]


> umbra ©   (27.09.05 17:01) [45]


> владельца процедуры


о боже)..

хрен редьки не слаще)

НЕТ у процедуры никаких "владельцев" !

и быть не может)


 
andsin   (2005-09-27 17:17) [48]

и вторая ерунда в твоем подходе обнаружилась - твой метод не различает объектов. чтобы не быть голословным, приведу код.
1.
 Form1.OnShow := nil;
 CompareMem(@Form1.OnShow, @Form1.OnShow, 4); //здесь прога гибнет


2.
 Form1.OnShow := Button1Click;
 Form2.OnHide := Button1Click;
 CompareMem(@Form1.OnShow, @Form2.OnHide, 4);//возвращает true;

убедил наконец?


 
Германн ©   (2005-09-27 17:18) [49]

По LMD удобнее стрелять дуплетом?


 
umbra ©   (2005-09-27 17:24) [50]

вообще-то я писал andsin

а насчет владельцев - хорошо, не владельцы, а ассоциированные объекты.

A method is a procedure or function associated with a class. A call to a method specifies the object (or, if it is a class method, the class) that the method should operate on.

перевод

Метод - процедура или функция, связанная с классом. В Вызове метода указывается объект (или, если это - метод класса, класс), в котором метод должен выполняться.


 
Digitman ©   (2005-09-27 17:25) [51]


> andsin   (27.09.05 17:17) [48]


да какое мне дело до твоих "объектов" ?!)

это уже твои проблемы - существуют объекты или нет)

ты спросил, КАК сравнить два значения типа TNotifyEvent БЕЗ приведения к TMethod - я тебе и ответил) ... чем ты не доволен ?))

а тебя понесло в совершенно иной огород)

ну РАЗУМЕЕТСЯ, что если объекта Form1 не существует (т.е. в дан.случае переменная Form1, содержащая nil, НЕ ссылается НИ на какой объект), то БЕССМЫСЛЕННО пытаться определять адрес некоего поля в несуществующей структуре несуществующего же объекта !

так что убеждать кого-то в очевидном - себе дороже станет)


 
umbra ©   (2005-09-27 17:29) [52]


> //здесь прога гибнет

она и не может не погибнуть. ты просишь ее читать из недоступного адреса. а во втором - из доступного (сам присваиваешь!)


 
andsin   (2005-09-27 17:38) [53]


> ну РАЗУМЕЕТСЯ, что если объекта Form1 не существует (т.е.
>  в дан.случае переменная Form1, содержащая nil, НЕ ссылается
> НИ на какой объект), то БЕССМЫСЛЕННО пытаться определять
> адрес некоего поля в несуществующей структуре несуществующего
> же объекта !
>
> так что убеждать кого-то в очевидном - себе дороже станет)
>

нет, ну что ты? я бы не стал тебя так обманывать. мало того, что Form1 существует и указывает на реальную форму, этот код губит прогу в обработчике Form1.Button1.OnClick. проверь.

> ты спросил, КАК сравнить два значения типа TNotifyEvent БЕЗ
> приведения к TMethod - я тебе и ответил) ... чем ты не доволен
> ?))

тем, что не сравнивает!!!!!!!!!! смотри п.2 из [48].


 
Verg ©   (2005-09-27 17:53) [54]

Да, блин,....
... оператор @ действует в этом случае не "в лоб". Он возвращает значение поля code эквивалентной структуры TMethod, а не адрес памяти, где эта структура хранится!


> 1.
>  Form1.OnShow := nil;
>  CompareMem(@@Form1.OnShow, @@Form1.OnShow, 4); //здесь прога
> не гибнет


 
andsin   (2005-09-27 18:05) [55]

правда случай 2 из [48] все равно возвращает true.


 
Digitman ©   (2005-09-27 18:13) [56]


> andsin   (27.09.05 17:38) [53]


добавь "барана" к @Form1.OnXXX ...


 
Суслик ©   (2005-09-27 18:14) [57]

maniaki


 
Digitman ©   (2005-09-27 18:14) [58]


> andsin   (27.09.05 18:05) [55]


а ПОЧЕМУ он НЕ должен возвращать True ?


 
andsin   (2005-09-28 09:26) [59]


> добавь "барана" к @Form1.OnXXX ...

а про двух баранов ты где в справке прочитал? и в [24] у тебя один баран.


 
andsin   (2005-09-28 09:36) [60]

к стати, с двумя @ работает правильно.  
итак, есть два способа, оказывается - приведение к Tmethod и CompareMem(@@Event....


 
Verg ©   (2005-09-28 09:42) [61]

Темы
"The @ operator", "Procedural types in statements and expressions"

"Справка" называется  Object Pascal Language Guide

P.S. Английским можно овладеть пользуясь словарем, как думаешь?



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

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

Наверх




Память: 0.57 MB
Время: 0.055 c
3-1125579072
Андрей Жук
2005-09-01 16:51
2005.10.16
Индексы по выражениям в Firebird


14-1127220284
Дядя Фёдор
2005-09-20 16:44
2005.10.16
Как сделать чтоб при надатии кнопки содержимое Edit сохранялась в


14-1127831750
LordOfRock
2005-09-27 18:35
2005.10.16
Metallica


1-1127666600
rusteam
2005-09-25 20:43
2005.10.16
прорисовать bmp в StringGrid в строго определенном месте


1-1127389954
antikaban
2005-09-22 15:52
2005.10.16
Как пределить путь к файлу?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский