Мне нужна програмка , которая бы написанный текст на Pascal`е в копаненте Memo(например) выполнялась в делфи ???!!!???
Помогите пожалуста.
Здравствуйте Иванов Иван Петрович, Вы писали:
ИИП>Мне нужна програмка , которая бы написанный текст на 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(например)
А вообще-то эт ведь тебе при таком задании компилятор написать надо
Существуют редакторы скриптов для паскаля, в фаст репорт, например, встроено...
Ищи на
www.torry.net
Здравствуйте Иванов Иван Петрович, Вы писали:
ИИП>Мне нужна програмка , которая бы написанный текст на Pascal`е в копаненте Memo(например) выполнялась в делфи ???!!!???
ИИП>Помогите пожалуста.
Ребята, живите проще!!!! Все уже готово и работает!!! (Спасибо буржуям!)
Узай на здоровье!
http://carlo-kok.com — тут лежит ОТЛИЧНАЯ паскаль енжина!!!!
Безвыходных ситуаций не бывает, это просто такое состояние головного мозга!!!