Форум: "Начинающим";
Текущий архив: 2008.09.14;
Скачать: [xml.tar.bz2];
ВнизВыполнение функции по ее имени Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.042 c