![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Процедура или функция в var-е [D7, WinXP]
Дмитрий_177 © (2006-01-10 17:35:00)Я видел в исходниках некоторых компонентов что прям в разделе описания переменных(var) процедуры, пишут еще какуюнибудь процедуру... я как понимаю что эта процедура или функция хранится в пямяти пока работает процедура которая ее содержит, и используется она только в этой процедуре, а потом уничтожается, при завершении процедуры ее содержащей... на сколько эффективен этот способ или всетаки лучше процедуры все как обычно делать? А еще подскажите пожалуйста как правильно объявлять такие процедуры в var-е, а то я уже не помню где я это видел...(((
Desdechado (2006-02-05 15:33:00) [1]такие inline-процедуры имеют смысл только тогда, когда код в ней является обобщением кода только вызывающей функции и не имеет смысла вне ее
Дмитрий_177 (2006-02-05 14:56:00) [2]Спасибо, вот так заработало ))) А еще такой вопрос, вообще рекомендуется ли такое использование процедуры в процедуре или лучше ее отдельно написать?
procedure TForm1.Button1Click(Sender: TObject);
procedure summa(a, b: integer);
begin
ListBox1.Items.Add(IntToStr(a) + ' + ' + IntToStr(b) + ' = ' + IntToStr(a + b));
end;
begin
summa(1, 2);
summa(2, 3);
summa(3, 4);
end;
palva (2006-02-05 14:21:00) [3]Неверная формулировка вопроса. Процедура находится не в разделе переменных а рассматривается как отдельный раздел. То есть если вы завершив процедуру хотите описать еще несколько переменных, то вам снова надо написать слово var. А var непосредственно перед процедурой рассматривается как ошибка, получается что это как бы пустой раздел переменных.
Плохиш (2006-02-05 02:30:00) [4]
> Дмитрий_177 (05.02.06 01:10) [8]
var - это объявление переменных,
а в твоём случае процедура - не переменная, а вложенная.
PS. Я так понимаю, изучать программирование по книжкам сейчас совсем не модно.
Дмитрий_177 (2006-02-05 01:10:00) [5]подставил в var перед процедурой "summa" просто так две переменные:
c,d: integer;
и заработало... что-то я не пойму почему так...
Дмитрий_177 (2006-02-05 01:04:00) [6]Что-то у меня не работает так...
procedure TForm1.Button1Click(Sender: TObject);
var
procedure summa(a, b: integer);
begin
ListBox1.Items.Add(IntToStr(a) + ' + ' + IntToStr(b) + ' = ' + IntToStr(a + b));
end;
begin
summa(1, 2);
summa(2, 3);
summa(3, 4);
end;
VirEx (2006-01-10 18:21:00) [7]
> [5] VirEx © (10.01.06 18:19)
блин, разбежался :)
pro1 ведь уже объявлена
VirEx (2006-01-10 18:19:00) [8]type
TSomeProc=procedure(a,b:string);
TSomeFunc=function(c:integer):boolean;
...
function pro1; external 'foo.dll';
function fun1; external 'foo.dll' name 'fun';
...
var
pro2:TSomeProc;
fun2:TSomeFunc;
pro3:procedure(a,b:string);
fun3:function(c:integer):boolean;
pro4:Pointer;
fun4:Pointer;
...
h:=loadLibrary('foo.dll');
pro:=GetProcAddress(h,'pro');
fun:=GetProcAddress(h,'fun');
pro1:=GetProcAddress(h,'pro');
fun2:=GetProcAddress(h,'fun');
pro4:=Pointer(pro);
fun4:=@fun;
...
pro('text1','text2');
b:=fun(5);
..
FreeLibrary(h);
Дмитрий_177 (2006-01-10 18:16:00) [9]Спасибо! :)
EvS (2006-01-10 18:03:00) [10]procedure Procedure1;
var a,b,...;
procedure Procedure2(c,d);
begin
....
end;
begin
....
Procedure2(a,b);
....
end;
Johnmen (2006-01-10 17:39:00) [11]Видимо ты имеешь в виду процедурный тип.
Все подробности и нюансы есть в хелпе, F1.
Leonid Troyanovsky (2006-01-10 17:39:00) [12]
> Дмитрий_177 (10.01.06 17:35)
Object Pascal Language Guide: Local declarations
--
Regards, LVT.