Текущий архив: 2005.09.04;
Скачать: CL | DM;
Вниз
Вызов функции по содержимому переменной Найти похожие ветки
← →
Ded Moroz © (2005-08-14 15:05) [0]ДВС! У меня есть StringList, где хранятся имена процедур моей программы. Если в Memo написать имя процедуры, она выполняется.
Вот код:
StringList.Create;
StringList.AddObject("Proc1",@Proc1);
StringList.AddObject("Proc2",@Proc2);
...
var
myFunc: procedure;
s: String;
begin
if Stringlist.indexof(S) = -1 then
MessageDlg("Не понял процедуру "+S,mtError,[mbOk],0)
else
begin
@myFunc:= Stringlist.Objects[Stringlist.indexof(S)];
myFunc;
end;
end;
Возник вопрос. Никак не могу подстроить этот код для вызова ф-ции с параметрами. Плюс неплохо было-бы получить в отдельную переменную String результат выполнения ф-ции.
Может кто-то знает, как решить проблему?
← →
Юрий Зотов © (2005-08-14 15:14) [1]type
TMyFunc = function(...): string;
var
myFunc: TMyFunc;
S, Res: String;
begin
if Stringlist.indexof(S) = -1 then
MessageDlg("Не понял процедуру "+S,mtError,[mbOk],0)
else
begin
@myFunc:= Stringlist.Objects[Stringlist.indexof(S)];
Res := myFunc(...)
end;
end;
Если возможны функции с разными списками параметров, то нужно определить все их типы, а в Stringlist придется хранить не только имя и адрес, а еще и признак типа функции.
← →
Юрий Зотов © (2005-08-14 15:21) [2]Не знаю деталей задачи, но не исключено, что может оказаться полезной еще и перегрузка (overload).
← →
jack128 © (2005-08-14 15:45) [3]
function TestFunc1(d: Double): Integer;
begin
....
end;
function TestFunc2(d: Double): Integer;
begin
....
end;
exports
TestFunc1,
TestFunc2;
procedure TForm1.Button1Click(Sender: TObject);
var
Func: function (d: Double): Integer;
begin
@Func := GetProcAddress(hInstance, PChar(Edit1.Text));
if @Func = nil then
raise Exception.CreateFmt("Функции с именем "%s" не существует", [Edit1.Text]);
ShowMessage(IntToStr(Func(10.63)));
end;
← →
TUser © (2005-08-14 16:13) [4]ИМХО, лучше сделать все эти процедуры published-методами какого либо класса.
← →
Slym © (2005-08-15 04:22) [5]Сделать 1 входной параметр типа Variant (VarArray - для множества параметров ) и результат типа Variant
Страницы: 1 вся ветка
Текущий архив: 2005.09.04;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.044 c