Главная страница
    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.078 c
2-1217707354
demon
2008-08-03 00:02
2008.09.14
API и меню


3-1205917843
pavel_guzhanov
2008-03-19 12:10
2008.09.14
rf сделать в запросе два варианта записи в одно поле?


2-1217583545
Vlad Oshin
2008-08-01 13:39
2008.09.14
cxGrid от DevExpress на форме в dll. Не выбирается мышкой строка.


2-1216308535
Дмитрий Белькевич
2008-07-17 19:28
2008.09.14
Окно - прогресс в отдельном потоке


15-1216664244
ob_kun
2008-07-21 22:17
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский