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

Вниз

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

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

Наверх




Память: 0.47 MB
Время: 0.009 c
14-24649
Study
2003-08-20 17:39
2003.09.08
AsPack


7-24714
OlegL
2003-06-24 14:55
2003.09.08
Название папки


7-24721
Alex-21
2003-06-20 21:22
2003.09.08
Завершение Windows


6-24599
Shluz
2003-06-27 20:41
2003.09.08
SMS своими руками ...


1-24475
strimmer
2003-08-27 20:04
2003.09.08
Программа остается в памяти!





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