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

Вниз

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

 
pohil   (2008-08-01 13:08) [0]

Здравствуйте!

Подскажите плз, как выполнить функцию по ее имени.
Например есть ф-ция:

function ExexMe(Str: string);
begin
 ShowMessage(Str);
end;


Как выполнить ее по имени? Вроде ананалога eval в JS.


 
Сергей М. ©   (2008-08-01 13:11) [1]

Считай что никак.


 
pohil   (2008-08-01 13:15) [2]

Спасибо, конечно.
Эээ.. но может все таки есть еще мнения?


 
Medbe}I{onok XML ©   (2008-08-01 13:16) [3]

по имени можно. если функция в dll


 
Сергей М. ©   (2008-08-01 13:17) [4]


> есть еще мнения?


При такой кривой и абстрактной постановке вопроса какие м.б. "иные мнения" ?)


 
Сергей М. ©   (2008-08-01 13:18) [5]


> Medbe}I{onok XML ©   (01.08.08 13:16) [3]


Ерунда полная)


 
Medbe}I{onok XML ©   (2008-08-01 13:20) [6]

ерунда, но по имени же


 
Сергей М. ©   (2008-08-01 13:20) [7]

А, прочем, ежели не брезговать костылем вида RunDLL32, то может и не ерунда.. Но то костыль и не универсальный причем)


 
Сергей М. ©   (2008-08-01 13:21) [8]


> по имени же


Где же по имени-то, если GetProcAddress ?


 
Medbe}I{onok XML ©   (2008-08-01 13:21) [9]

Подскажите плз, как выполнить функцию по ее имени.
Например есть ф-ция:

function ExexMe(Str: string);
begin
ShowMessage(Str);
end;


Вот так:

begin
ExeMe("это_вызов_функции_exeme_по_имени");
end;


 
Сергей М. ©   (2008-08-01 13:25) [10]


> ExeMe("это_вызов_функции_exeme_по_имени");


Не-а ..
Это по адресу, который вычислен в билд-тайм и с которым в дизайн-тайм ассоциирован некий символьный ид-р)


 
Medbe}I{onok XML ©   (2008-08-01 13:25) [11]

у меня не адрес написан и не фамилия, а имя
:)))


 
Medbe}I{onok XML ©   (2008-08-01 13:26) [12]

вызываю по имени, а адрес уже по нему вычисляется.
вначале было имя.


 
pohil   (2008-08-01 13:27) [13]


> Вот так:begin ExeMe("это_вызов_функции_exeme_по_имени");
> end;


Medbe}I{onok XML © победил систему ))))))))


 
Leonid Troyanovsky ©   (2008-08-01 13:31) [14]


> pohil   (01.08.08 13:08)  

> Как выполнить ее по имени? Вроде ананалога eval в JS.

Vladimir Titov wrote:

type
{$M+}
 TMyObj = class
 published
   function CommandOne: Integer;
   function CommandTwo: Integer;
   function CommandThree: Integer;
   function CommandFour: Integer;
 end;
{$M-}

function DoCommand1(const Command: string): Integer;
var
CommandProc: function: Integer of object;
begin
 TMethod(CommandProc).Code := TMyObj.MethodAddress(Command);
 if Assigned(TMethod(CommandProc).Code) then Result := CommandProc;
end;

PS: A second method by V.Titov :

uses
 TypInfo;

type
 TCommand = (CommandOne, CommandTwo, CommandThree, CommandFour);

function DoCommand2(const Command: string): Integer;
begin
 Result := 0;
 case TCommand(GetEnumValue(TypeInfo(TCommand), Command)) of
     CommandOne: ..;
     CommandTwo: ..;
   CommandThree: ..;
    CommandFour: ..;
 end;
end;

--
Regards, LVT.


 
Сергей М. ©   (2008-08-01 13:31) [15]


> адрес уже по нему вычисляется


Не возражаю).. Но в вычисляется он не в ран-тайм, а в вопросе автора прямо сквозит ран-тайм, зато слово "адрес" вообще не сквозит)


 
Johnmen ©   (2008-08-01 13:34) [16]


> Сергей М. ©   (01.08.08 13:31) [15]

Медвежата не делают разницы между файлом с текстом программы и скомпилированным исполняемым файлом. Им все едино. Ибо XML
:)


 
Сергей М. ©   (2008-08-01 13:34) [17]


> Leonid Troyanovsky ©   (01.08.08 13:31) [14]


Дык ыть диспетчеризация же требуется)

А ну как у автора CommandTuevaHucha ?

Тады уж проще воспользоваться готовым костылем - диспинтерфейсом)


 
Сергей М. ©   (2008-08-01 13:36) [18]


> Johnmen ©   (01.08.08 13:34) [16]


))

А автер тем временем, похоже, лепит какой-то скрипт-интерпретер..

Диспинтерфейс ему нужен, а то ведь изобретет очередной велосипед)


 
Плохиш ©   (2008-08-01 13:39) [19]


> Подскажите плз, как выполнить функцию по ее имени.

В рантайме у функций нет имён.


 
Medbe}I{onok XML ©   (2008-08-01 13:41) [20]

а может чувак просто про ифы не знает?


 
Сергей М. ©   (2008-08-01 13:43) [21]


> может чувак просто про ифы не знает?


Чудак человек !
Откуда "чувакам" знать про "ифы" ?
Они же "чуваки" !


 
Alucard   (2008-08-01 21:01) [22]

Можно с применением файлов debug info, но если речь действительно об интерпретаторе, то не годится. Неплохо бы знать цель.


 
oxffff ©   (2008-08-02 12:21) [23]


> pohil   (01.08.08 13:08)  


Все возможно. Нужна более точная  поставнока задачи.



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

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

Наверх




Память: 0.52 MB
Время: 0.022 c
3-1205998904
denmin
2008-03-20 10:41
2008.09.14
Не постятся данные в PostgreSQL.


2-1216308535
Дмитрий Белькевич
2008-07-17 19:28
2008.09.14
Окно - прогресс в отдельном потоке


2-1217830597
начинающий
2008-08-04 10:16
2008.09.14
Как посчитать сумму?


4-1196408923
serg128
2007-11-30 10:48
2008.09.14
Как определить загрузку процессора?


15-1216971984
Lamerenok
2008-07-25 11:46
2008.09.14
Как установить Fastnet пакет ?