Главная страница
    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.5 MB
Время: 0.042 c
13-1121704896
cherrex
2005-07-18 20:41
2008.09.14
Cassini server


4-1196680450
clickmaker
2007-12-03 14:14
2008.09.14
BackupWrite меняет размер файла?


15-1216906570
Jeer
2008-07-24 17:36
2008.09.14
Третий Всероссийский Слет Сисадминов


11-1190893585
Алекс ей Долгов
2007-09-27 15:46
2008.09.14
Печать отчета по базе данных из KOL&MCK


15-1216726494
Zhekson
2008-07-22 15:34
2008.09.14
qtintf70.dll - кто-нибудь знает, что это за бибилиотека ?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский