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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.013 c
4-1118400018
Allex
2005-06-10 14:40
2005.08.14
внедрение в системное меню


3-1120553844
Gaval
2005-07-05 12:57
2005.08.14
создание базы


4-1119458310
XCept.ion
2005-06-22 20:38
2005.08.14
Kейлоггинг


1-1122121140
-virus-
2005-07-23 16:19
2005.08.14
OpenGL графика в проектах Delphi (книга)


14-1121873134
drakoga
2005-07-20 19:25
2005.08.14
Где в Делфи7 компонент NMSMTP





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