Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2008, 19:36   #1
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
Смех Запустить строчку как код.

Доброго времени суток!
У меня вопрос: а возможно ли запустить строчку как код? Например:

Код:
a:='showmessage('Привет');'
runusstrochka(a); // знать бы команду
Чтобы оно в результате показало сообщение "Привет".
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 15.04.2008, 19:58   #2
WOLFak
Форумчанин
 
Аватар для WOLFak
 
Регистрация: 30.12.2007
Сообщений: 180
По умолчанию

я тоже так хочу) я создам 2 ой делфи)
^_^
WOLFak вне форума Ответить с цитированием
Старый 15.04.2008, 20:00   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Напишете свой интерпретатор - и будете запускать...
Стандартные средства Дельфи такие извращения не поддерживают.
mihali4 вне форума Ответить с цитированием
Старый 15.04.2008, 20:52   #4
merax
Форумчанин
 
Регистрация: 27.12.2006
Сообщений: 955
По умолчанию

Самое безумно то, что такое возможно !!! И без всяких интерпретаторов !!!

Нужен всего лишь массив с байт-кодом на ассембрере и точка входа.

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Стандартные средства Дельфи такие извращения не поддерживают.
Еще как поддерживаю. Надо импровизировать. Такое проворачивалось на C# который ассемблер вообще не держит.

Последний раз редактировалось merax; 15.04.2008 в 20:55.
merax вне форума Ответить с цитированием
Старый 15.04.2008, 21:30   #5
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Как один из вариантов (это обычный unit, не dll):

Код:
procedure test1; export;
begin
   showmessage('test1');
end;

procedure test2; export;
begin
   showmessage('test2');
end;

type
   TProc = procedure;

procedure runString(S:String);
var P:TProc;
begin
   P := getProcAddress(GetModuleHandle('Application.Name'), Pointer(S));
   if @P <> nil then P;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
   runString('test1');
   runString('test2');
end;

exports test1;
exports test2;
Синтаксический анализатор все-таки потребуется для обработки параметров. merax прав - импровизируем.
alexBlack вне форума Ответить с цитированием
Старый 15.04.2008, 23:49   #6
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Способ интересный, но по сути он ничем не отличается допустим от такого:
Код:
procedure RunString(s: string);
begin
if s = 'ShowMessage('Привет')' then ShowMessage('Привет');
end;
То есть сначала пишем код (неважно где и как), а потом его вызываем. И вовсе необязательно ShowMessage писать, можно и так: АНуКаПокажи(Привет) ничего от этого не изменится.

Так что Михалыч прав.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 16.04.2008, 00:00   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
if s = 'ShowMessage('Привет')' then ShowMessage('Привет');
Это и есть наипростейший интерпретатор.
mihali4 вне форума Ответить с цитированием
Старый 16.04.2008, 00:12   #8
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
Радость А если так...

Код:
if s = 'ShowMessage('Привет')' then ShowMessage('Привет');
А если так? Запустите такое:

Код:
'ShowMessage('Привет Вася, как дела? У меня '+ inttostr(round(sqr(pi*180)/22)+' . Ответь');
Как это обработать?
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Старый 16.04.2008, 00:15   #9
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Все так же, только е...тни больше.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 16.04.2008, 00:52   #10
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

Я вот написал чтото типа кампилятора, распознает около 20-ти команд. А как сделать, чтобы он читал не 2(у меня max) а больше пераметров?
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг
Dj_smart вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переход по букве на нужную строчку в DBGrid Aleksandr БД в Delphi 6 19.08.2009 14:41
Рразъясните строчку. Amen Помощь студентам 11 30.08.2008 02:45
Как с поиощью hiew вставить в файл строчку, "раздвинуть" файл и вставить туда строчку? barand Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 28.06.2008 10:58
DBLookupComboBox на первую строчку Inbox БД в Delphi 7 29.10.2007 13:26
как в мемо добавить в текущую строчку символ из переменной Kukkk Общие вопросы Delphi 6 01.09.2007 16:48