!!!Пожалуста помогите!!!
От: Иванов Иван Петрович  
Дата: 28.03.02 16:44
Оценка:
Мне нужна програмка , которая бы написанный текст на Pascal`е в копаненте Memo(например) выполнялась в делфи ???!!!???
Помогите пожалуста.
Re: !!!Пожалуста помогите!!!
От: Sinclair Россия https://github.com/evilguest/
Дата: 28.03.02 20:40
Оценка:
Здравствуйте Иванов Иван Петрович, Вы писали:

ИИП>Мне нужна програмка , которая бы написанный текст на Pascal`е в копаненте Memo(например) выполнялась в делфи ???!!!???

ИИП>Помогите пожалуста.

Гм. Я понимаю, людям некогда учить русский язык, будем учить Delphi.
Хорошо.
Сделать компилятор, который прямо генерит Паскаль-код, а потом его выполняет, весьма сложно. Это я так. К слову.

Предоставить возможность написать функцию, а потом вызвать ее из кода того же приложения и даже получить результат, можно сравнительно легко, если ограничиться одной сигнатурой. Например, функции вида

function DoSomething(Param: Integer): Integer;
begin
  if Param<=1 then return param else return DoSomething(Param-1);
end;

достаточно легко обработать следующим образом:
предварить процедурку кодом типа
library RandGeneratedId46721454;
function <%parsedfunctionname%>(Param: Integer): Integer; forward;
exports <%parsedfunctionname%>;

и добавить в конец код
begin end.

Полученный текст скинуть на диск, компильнуть dcc, потом загрузить полученный dll (LoadLibrary) и законопатить функцию при помощи GetProcAddress. Надеюсь, парсинг текста в поисках имени функции не представляет проблемы.
Подход можно расширить — поддерживать не одну сигнатуру, а несколько.

Второй вариант интерпретации столь детально сформулированной задачи таков: надо скомпилировать программу на дельфи целиком, т.е. в Memo лежит текст вида

program TheProgram;
uses Classes, SysUtils, Messages, Windows, CustomCode;
type
  TForm1 = class(TCustomForm, IComplexDispatchExtension, IStream, IWebBrowser2)
    ...
  end;
var
  WillItCrash: variant;
begin
  WillItCrash:= TForm1.Create(TComponent(Application));
  try
    FreeLibrary(GetModuleHandle('Ole32.dll');
    WillItCrash.FakeMethod(TObject(@WillItCrash).ClassName)
  finally
    VarClear(WillItCrash);
  end;
end;

, то это будет довольно сложно компилять. Потому, что модуль CustomCode, использованный в строке 2, может лежать непонятно где. А попытки писать в таком приложении на псевдопаскале, типа
program Pascal32Program;
var
  Hello: String;
begin
  Hello:= "USA";
//  Hello:= "World"; // NB: Do not forget to uncomment in international version!
  WriteLn(FormatStr("Hello, %s!", [Hello])); 
end;

кончатся печально — пока линкеру не сказано, что это консольное приложение, никаких WriteLn не будет.

Мораль: для того, чтобы сделать более полноценное решение, которое бы выполнялась в делфи ???!!!???, надо понимать, что за текст на Pascal`е предполагается быть в копаненте Memo(например)
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re: !!!Пожалуста помогите!!!
От: Slayer Россия  
Дата: 29.03.02 03:20
Оценка:
А вообще-то эт ведь тебе при таком задании компилятор написать надо
Re[2]: !!!Пожалуста помогите!!!
От: vav Россия  
Дата: 29.03.02 05:47
Оценка:
Существуют редакторы скриптов для паскаля, в фаст репорт, например, встроено...
Ищи на www.torry.net
Re[2]: !!!Пожалуста помогите!!!
От: Иванов Иван Петрович  
Дата: 29.03.02 06:06
Оценка:
Например в Memo будет написано:

Program D;
uses crt;

var i:byte;

procedure entr;
begin
writeln;
writeln('Для продолжения нажмите Enter.');
readln;
end;

Begin
for i:=1 to 10 do
entr;
end;

И программа должна выпонить действие (написанное на языке Pascal) описанное в Memo.
Please help.
Re: !!!Пожалуста помогите!!!
От: AIR Россия  
Дата: 29.03.02 06:25
Оценка:
Здравствуйте Иванов Иван Петрович, Вы писали:

ИИП>Мне нужна програмка , которая бы написанный текст на Pascal`е в копаненте Memo(например) выполнялась в делфи ???!!!???

ИИП>Помогите пожалуста.
Ребята, живите проще!!!! Все уже готово и работает!!! (Спасибо буржуям!)
Узай на здоровье!
http://carlo-kok.com — тут лежит ОТЛИЧНАЯ паскаль енжина!!!!
Безвыходных ситуаций не бывает, это просто такое состояние головного мозга!!!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.