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

Вниз

Длина тела функции   Найти похожие ветки 

 
Verder   (2005-07-27 13:50) [0]

Как определить длину тела функии в Delphi? Есть консольное приложение, основной и модуль с одной единственной функцией.


program SimpleProg;

{$APPTYPE CONSOLE}

uses
 SysUtils,
 func in "func.pas";

begin
  Prob();
end.



Нужно определить длину тела функции Prob();


 
MBo ©   (2005-07-27 13:54) [1]

Вычесть из адреса следующей за Prob функции (если такой нет, ввести пустышку) адрес самой Prob


 
Verder   (2005-07-27 14:41) [2]

Адрес начала следующей процедуры не равен следующему за адресом окончания предыдущей процедуры. Надо ли учитывать эту разницу при определении длины?


 
Leonid Troyanovsky ©   (2005-07-27 14:50) [3]


> Verder   (27.07.05 14:41) [2]
> Адрес начала следующей процедуры не равен следующему за
> адресом окончания предыдущей процедуры. Надо ли учитывать
> эту разницу при определении длины?


Зависит от цели, для которой оная длина определяется.
Например, если для "перемещения" кода, то от лишних
пары байт вреда, IMHO, не будет.

--
Regards, LVT.

PS Кстати, ранние версии Дельфи (<=3) умели делать SizeOf
(не очень понятно зачем).


 
begin...end ©   (2005-07-27 14:53) [4]

> Verder   (27.07.05 14:41) [2]

> Адрес начала следующей процедуры не равен следующему
> за адресом окончания предыдущей процедуры.

В смысле?


 
jack128 ©   (2005-07-27 14:57) [5]

Leonid Troyanovsky ©   (27.07.05 14:50) [3]
(не очень понятно зачем).

Мда?? Семерка вот такой код тоже пропускает

procedure Test;
begin
 ShowMessage("fwfd");
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Caption := IntToStr(SizeOf(Test))
end;
но возвращает ноль. Я так понимаю, что этот код интерпритируется как определение размера РЕЗУЛЬТАТА функции, а так как в данном случае мы имеем процедуру, то размер её результата - 0.  В ранних версиях не так было?


 
Leonid Troyanovsky ©   (2005-07-27 15:10) [6]


> jack128 ©   (27.07.05 14:57) [5]
> end; но возвращает ноль. Я так понимаю, что этот код интерпритируется
> как определение размера РЕЗУЛЬТАТА функции, а так как в
> данном случае мы имеем процедуру, то размер её результата
> - 0.  В ранних версиях не так было?


Еще в D3 SizeOf возвращал размер процедуры в байтах.
Далее, все правильно - размер результата.

--
Regards, LVT.


 
Verder   (2005-07-27 15:14) [7]

begin...end ©   (27.07.05 14:53) [4]

Адрес начала процедуры Prob() — 00407F94, окончание 00407FB1. Адрес же начала процедуры Prob1() — 00407FC4.



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

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

Наверх




Память: 0.48 MB
Время: 0.04 c
4-1119341528
Kerk
2005-06-21 12:12
2005.08.14
EM_CHARFROMPOS


10-1099388768
sergvc
2004-11-02 12:46
2005.08.14
Не могу зарегистрировать СОМ компонент


14-1121950650
аРТ
2005-07-21 16:57
2005.08.14
Как сделать 2 разные юридически и одинаковые функционально проги?


14-1121857204
dreamse
2005-07-20 15:00
2005.08.14
Конвертировать с C в Delphi


14-1122286791
NewWonder
2005-07-25 14:19
2005.08.14
Экзамен по информатике: нужна помощь