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

Вниз

Вызов функции из функции   Найти похожие ветки 

 
shark ©   (2003-08-25 16:14) [0]

у меня есть функция :
function RunFunktion( name: string )
...
так вот вопрос - как мне вызвать процедуру или функцию зная ее имя в формате String ???
Или может есть специальный тип переменной для имен процедур ???


 
HolACost! ©   (2003-08-25 16:17) [1]

Вопрос уже был - смотри дайджест! К своим словам могу выдать ещё одну весч! Если надо - напишу - много больно!


 
Digitman ©   (2003-08-25 16:27) [2]


> shark


в общем случае (именно в таком вот примитивном виде) - никак

частных же случаев несколько, и каждый из них нужно рассматривать в отдельности, неразрывно с программным механизмом, реализующим тем или иным образом схожую возможность


 
jack128 ©   (2003-08-25 16:27) [3]

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

exports
Test;

procedure TForm1.Button1Click(Sender: TObject);
var
p : TProcedure;
hLib : THandle;
begin
hLib := GetModuleHandle(PChar(ExtractFileName(Application.ExeName)));
@p := GetProcAddress (hLib,"Test");
if @p <> nil then
p;
end;


 
jack128 ©   (2003-08-25 16:29) [4]

Да, естественно предпологается, что заголовок у всех твоих функций одинаков


 
Юрий Федоров ©   (2003-08-25 16:31) [5]

>> hLib := GetModuleHandle(PChar(ExtractFileName(Application.ExeName)));
Может просто hInstance ?


 
jack128 ©   (2003-08-25 16:33) [6]


> Может просто hInstance ?

Может -)


 
Palladin ©   (2003-08-25 16:36) [7]

:)


 
shark ©   (2003-08-25 17:06) [8]

Спасибо усем !!! =)))


 
shark ©   (2003-08-25 17:10) [9]

У меня еще вопрос
А как передать в такую процедуру параметры ?


 
default ©   (2003-08-25 17:12) [10]

shark ©
значит ты не понял код Jack128...
спросил бы тогда...объяснили бы...
опиши вместо TProcedure нужный тебе тип и всё и потом вызывай с параметром(ами)


 
Palladin ©   (2003-08-25 17:13) [11]

научится парсить строку


 
default ©   (2003-08-25 17:24) [12]

Palladin
на это нужно время а тут всё сразу
и наверно с минимальным кол-ом кода и сил...


 
shark ©   (2003-08-25 17:26) [13]

А код как пример написать можете ?


 
Palladin ©   (2003-08-25 17:30) [14]

var
Params:TStringList;
ParamStr:string;
...
ParamStr:=Copy(s,pos("(",s)+1,pos(")",s)-pos("(",s));
Params:=TStringList.Create;
Params.Delimiter:=",";
Params.DelimitedText:=ParamStr;
...

учти... строки содержащие запятую - корректно парсится не будут...


 
default ©   (2003-08-25 17:30) [15]


type
TMyProc = procedure(const A, B: Single);
procedure Test();
begin
ShowMessage("Test");
end;

exports
Test;

procedure TForm1.Button1Click(Sender: TObject);
var
p : TMyProc;
begin
@p := GetProcAddress (hLib,"Test");
if @p <> nil then
p(1.5, 3.7);
end;

вот подделанный код Jack128


 
default ©   (2003-08-25 17:32) [16]

вместо hLib - hInstance


 
shark ©   (2003-08-25 17:36) [17]

Опять спасибо , теперь я уже думаю вопросов небудет =)



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

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

Наверх




Память: 0.5 MB
Время: 0.02 c
4-24746
MishaS
2003-07-07 17:15
2003.09.08
Как определить высоту заголовка формы


3-24378
ASt
2003-08-15 20:41
2003.09.08
Чтение данных из таблицы


1-24497
qwerty2
2003-08-27 10:59
2003.09.08
Странная проблема с Application.MessageBox


1-24513
div
2003-08-27 09:11
2003.09.08
Компоненты архиваторов


3-24334
Rel_
2003-08-18 12:16
2003.09.08
запрос