Форум: "Основная";
Текущий архив: 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