Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.048 c
15-1216992640
Vlad Oshin
2008-07-25 17:30
2008.09.14
Зачем сайты используют мое время в системе!?


2-1217469118
Vitaliy____
2008-07-31 05:51
2008.09.14
Нетипизированные указатели


15-1216662309
Вася
2008-07-21 21:45
2008.09.14
Не могу запустить Делфи


15-1216634664
TUser
2008-07-21 14:04
2008.09.14
Сколько ватт БП и дополнительных вентилияторов


2-1217517743
altatr
2008-07-31 19:22
2008.09.14
Использование процедур





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский