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

Вниз

Функция должна вернуть ссылку на функцию   Найти похожие ветки 

 
Yozch ©   (2003-02-18 16:04) [0]

Уважаемые мастера. Мне необходимо, чтобы функция в зависимости от входного параметра вернула НАЗВАНИЕ функции, которую мне впоследствии нужно использовать
Типа

begin
qwe(1).creat;
......
end;


function qwe(chIn:integer): ??
begin
if chIn:=1 then result:=??
...
end;


 
MBo ©   (2003-02-18 16:05) [1]

может, перефразируешь вопрос? ;)


 
Игорь Шевченко ©   (2003-02-18 16:11) [2]

И как же ее потом, по названию, использовать ?
(Или это второй вопрос будет) ?


 
Silver_   (2003-02-18 16:12) [3]

Type
f1 = Function ...
псматри в хелпе на процедурный тип

... Result по Case можешь присвоить нужную функцию...


 
jack128 ©   (2003-02-18 16:13) [4]

Вопрос протеворечит теме
Что же все - таки должна вернуть твоя функция - другую функцию(тогда см процедурные типы) или название функции(тогда результат типа string)?


 
Yozch_   (2003-02-18 16:23) [5]

Ребята, есть рабочий код

with TCipher_Diamond2.Create do
try
Mode := TCipherMode(1);
InitKey(EDit15.Text, nil);
R := EncodeString(Sender);
// DefaultDigestStringFormat:=16;
case DefaultDigestStringFormat of
16: Sender := StrToBase16(PChar(R), Length(R));
64: Sender := StrToBase64(PChar(R), Length(R));
else
Sender:=R
end;
Done;
finally
Free;
end;

Перед его использования треба запросить функцию, которая вернет название функции, которую трэба использовать вместо TCipher_Diamond2, например gost


 
PVOzerski ©   (2003-02-18 17:42) [6]

Если функция - не метод, можно извратиться следующим образом:
те функции, которые требуется вызывать по имени, перечислить в секции exports (это поддерживается не только в dll, но и в exe), а потом вызывать через GetProcAddr от hInstance. Такое действительно работает, хотя код выглядит странно. А вот с методом... У Вас еще и конструктор... А именно название позарез надо? - а то ведь ещё метаклассы есть (см. tClass).


 
DimonZh ©   (2003-02-18 17:48) [7]

В паскале это делалось очень просто:

{F+}
type func:function(x:real):real;

Function f1(x:real):real;
Begin ... end;

Function f2(x:real):real;
Begin ... end;

Function FFF(x:integer):func;
Begin
if x>0 then fff:=f1 else fff:=f2; //не уверен, но как-то так
end;
{F-}



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

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

Наверх




Память: 0.48 MB
Время: 0.033 c
1-87539
R2D2
2003-02-16 23:29
2003.02.27
При нажатии в Edit клавиши Enter раздается beep.


14-87633
Malder
2003-02-05 22:50
2003.02.27
программа для отправки SMS


14-87630
Mihey
2003-02-09 19:13
2003.02.27
Сложнейшая задача.


1-87382
Process Killer
2003-02-17 18:31
2003.02.27
CGI


1-87489
wam
2003-02-15 22:33
2003.02.27
Автоскроллинг TStringGrid