Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.16;
Скачать: CL | DM;

Вниз

Сравнение двух величин 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;
Скачать: CL | DM;

Наверх




Память: 0.59 MB
Время: 0.054 c
3-1124981162
<Lelik>
2005-08-25 18:46
2005.10.16
Lock conflict on no wait


14-1127311527
Anatoly Podgoretsky
2005-09-21 18:05
2005.10.16
Новости от Касперского


3-1125652771
Nickolay
2005-09-02 13:19
2005.10.16
Простейшие операции с таблицами БД Access с помощью ADO


4-1124123194
dddim
2005-08-15 20:26
2005.10.16
установить Привелегию процессу


1-1127841664
serg128
2005-09-27 21:21
2005.10.16
Как програмно получить доступ к 15 последним открытым документам