![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Выполнение функции по ее имени [D7, XP]
pohil © (2008-08-01 13:08:00)Здравствуйте!
Подскажите плз, как выполнить функцию по ее имени.
Например есть ф-ция:
function ExexMe(Str: string);
begin
ShowMessage(Str);
end;
Как выполнить ее по имени? Вроде ананалога eval в JS.
oxffff (2008-08-02 12:21:00) [1]
> pohil (01.08.08 13:08)
Все возможно. Нужна более точная поставнока задачи.
Alucard (2008-08-01 21:01:00) [2]Можно с применением файлов debug info, но если речь действительно об интерпретаторе, то не годится. Неплохо бы знать цель.
Сергей М. (2008-08-01 13:43:00) [3]
> может чувак просто про ифы не знает?
Чудак человек !
Откуда "чувакам" знать про "ифы" ?
Они же "чуваки" !
Medbe}I{onok XML (2008-08-01 13:41:00) [4]а может чувак просто про ифы не знает?
Плохиш (2008-08-01 13:39:00) [5]
> Подскажите плз, как выполнить функцию по ее имени.
В рантайме у функций нет имён.
Сергей М. (2008-08-01 13:36:00) [6]
> Johnmen © (01.08.08 13:34) [16]
))
А автер тем временем, похоже, лепит какой-то скрипт-интерпретер..
Диспинтерфейс ему нужен, а то ведь изобретет очередной велосипед)
Сергей М. (2008-08-01 13:34:00) [7]
> Leonid Troyanovsky © (01.08.08 13:31) [14]
Дык ыть диспетчеризация же требуется)
А ну как у автора CommandTuevaHucha ?
Тады уж проще воспользоваться готовым костылем - диспинтерфейсом)
Johnmen (2008-08-01 13:34:00) [8]
> Сергей М. © (01.08.08 13:31) [15]
Медвежата не делают разницы между файлом с текстом программы и скомпилированным исполняемым файлом. Им все едино. Ибо XML
:)
Сергей М. (2008-08-01 13:31:00) [9]
> адрес уже по нему вычисляется
Не возражаю).. Но в вычисляется он не в ран-тайм, а в вопросе автора прямо сквозит ран-тайм, зато слово "адрес" вообще не сквозит)
Leonid Troyanovsky (2008-08-01 13:31:00) [10]
> 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.
pohil (2008-08-01 13:27:00) [11]
> Вот так:begin ExeMe('это_вызов_функции_exeme_по_имени');
> end;
Medbe}I{onok XML ©победил систему ))))))))
Medbe}I{onok XML (2008-08-01 13:26:00) [12]вызываю по имени, а адрес уже по нему вычисляется.
вначале было имя.
Medbe}I{onok XML (2008-08-01 13:25:00) [13]у меня не адрес написан и не фамилия, а имя
:)))
Сергей М. (2008-08-01 13:25:00) [14]
> ExeMe('это_вызов_функции_exeme_по_имени');
Не-а ..
Это по адресу, который вычислен в билд-тайм и с которым в дизайн-тайм ассоциирован некий символьный ид-р)
Medbe}I{onok XML (2008-08-01 13:21:00) [15]Подскажите плз, как выполнить функцию по ее имени.
Например есть ф-ция:
function ExexMe(Str: string);
begin
ShowMessage(Str);
end;
Вот так:
begin
ExeMe('это_вызов_функции_exeme_по_имени');
end;
Сергей М. (2008-08-01 13:21:00) [16]
> по имени же
Где же по имени-то, если GetProc Address?
Сергей М. (2008-08-01 13:20:00) [17]А, прочем, ежели не брезговать костылем вида RunDLL32, то может и не ерунда.. Но то костыль и не универсальный причем)
Medbe}I{onok XML (2008-08-01 13:20:00) [18]ерунда, но по имени же
Сергей М. (2008-08-01 13:18:00) [19]
> Medbe}I{onok XML © (01.08.08 13:16) [3]
Ерунда полная)
Сергей М. (2008-08-01 13:17:00) [20]
> есть еще мнения?
При такой кривой и абстрактной постановке вопроса какие м.б. "иные мнения" ?)