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

Вниз

Сравнение переменных процедурного типа   Найти похожие ветки 

 
RWolf ©   (2010-04-22 15:41) [0]

type
 TProc=procedure of object;

 TForm1 = class(TForm)
   Button1: TButton;
   procedure FormCreate(Sender: TObject);
   procedure Button1Click(Sender: TObject);
 private
   procedure p;
   procedure p1;
 end;

var
 a,b:TProc;

...

procedure TForm1.FormCreate(Sender: TObject);
begin
 a:=p;
 b:=p1;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
 if a=b then                  //!!!
   ShowMessage("eq");
end;


Строчка, помеченная восклицательными знаками, не компилируется.
Предположим, что правильный синтаксис - if @a=@b then ...
Смотрим, во что компилируется эта строчка:
Unit1.pas.49: if @a=@b then
004529B0 A1005C4500       mov eax,[a]
004529B5 3B05085C4500     cmp eax,[b]
004529BB 750A             jnz +$0a
Unit1.pas.50: ShowMessage("eq");
004529BD B8D0294500       mov eax,$004529d0
004529C2 E86150FDFF       call ShowMessage
Unit1.pas.51: end;
004529C7 C3               ret

Как видим, сравниваются только 4 младших байта процедурной переменной.
Вопрос: это баг Delphi 7, или есть другой синтаксис сравнения переменных процедурного типа, более правильный?


 
turbouser ©   (2010-04-22 15:45) [1]


> RWolf ©   (22.04.10 15:41)  

А что, по твоему, представляют из себя
> переменных процедурного типа

?


 
RWolf ©   (2010-04-22 15:47) [2]

> turbouser

В данном случае - 8 байт: адрес метода и адрес объекта.


 
Ega23 ©   (2010-04-22 15:57) [3]

if (TMethod(...).Code =  TMethod(...).Code) and (TMethod(...).Data = TMethod(...).Data) then ...


 
RWolf ©   (2010-04-22 16:00) [4]

> Ega23
ясно :)



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

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.047 c
15-1259160570
Игорь Шевченко
2009-11-25 17:49
2010.08.27
Желающие поговорить о лженауке - милости прошу


15-1275844691
Dima84
2010-06-06 21:18
2010.08.27
Ошибка form of method call


15-1267337984
Kerk
2010-02-28 09:19
2010.08.27
Некачественное выполнение госконтракта


15-1268602039
Ega23
2010-03-15 00:27
2010.08.27
А давайте задачку порешаем?


2-1268894663
Delphist
2010-03-18 09:44
2010.08.27
обновление информации в гриде