Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выполнение функции по ее имени [D7, XP]


Страницы:   1 2

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]


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


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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо