RemObjects Pascal Script и динамические объекты

Вопросы использования сторонних (не входящих в состав FPC и Lazarus) утилит и библиотек.

Модератор: Модераторы

RemObjects Pascal Script и динамические объекты

Сообщение Shura1oplot » 22.03.2008 21:07:51

При создании динамических объектов в скрипте, объект TPSExec выдает ошибку "Exception: Access violation" Пробовал в виндоус и линуксе. Программа
Код: Выделить всё
program project1;

{$mode objfpc}{$H+}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  Classes,
  uPSCompiler,
  uPSRuntime,
  uPSC_std,
  uPSC_classes,
  uPSR_std,
  uPSR_classes;

const
  Script = 'begin TStringList.Create; end.';

var
  Compiler: TPSPascalCompiler;
  Exec: TPSExec;
  Data: string;
  CI: TPSRuntimeClassImporter;

function ScriptOnUses(Sender: TPSPascalCompiler; const Name: string): Boolean;
begin
  if Name = 'SYSTEM' then
  begin
    SIRegister_std(Sender);
    SIRegister_classes(Sender,false);
    Result := True;
  end else
    Result := False;
end;

begin
  Compiler:=TPSPascalCompiler.Create;
  Compiler.OnUses:=@ScriptOnUses;
  if not Compiler.Compile(Script) then begin
    Compiler.Free;
    Exit;
  end;
  Compiler.GetOutput(Data);
  Compiler.Free;

  CI:=TPSRuntimeClassImporter.Create;
  RIRegister_Std(CI);
  RIRegister_Classes(CI,false);

  Exec := TPSExec.Create;
  RegisterClassLibraryRuntime(Exec,CI);

  if not Exec.LoadData(Data) then begin
    Exec.Free;
    Exit;
  end;

  Exec.RunScript;
  writeLn(TIFErrorToString(Exec.ExceptionCode,Exec.ExceptionString));

  Exec.Free;
  CI.Free;
end.

Делал точь-в-точь по примерам. Аналогичная программа, скомпилированная в Delphi 2007 исполняет скрипт без ошибок. Куда стоит копать?
Аватара пользователя
Shura1oplot
незнакомец
 
Сообщения: 3
Зарегистрирован: 19.03.2008 15:28:02

Сообщение GrayEddy » 22.03.2008 23:12:58

> Compiler.OnUses:=@ScriptOnUses;

Попробуйте убрать "собаку" или выставьте режим {$mode delphi} ({$mode objfpc} - убрать)
GrayEddy
постоялец
 
Сообщения: 375
Зарегистрирован: 06.05.2005 09:37:56

Сообщение Shura1oplot » 23.03.2008 00:52:45

GrayEddy
без @ с {$mode objfpc} компилятор ругается на неверное количество параметров. с {$mode delphi} не ругается. TPSExec все равно выдает ошибку
Аватара пользователя
Shura1oplot
незнакомец
 
Сообщения: 3
Зарегистрирован: 19.03.2008 15:28:02

Сообщение GrayEddy » 23.03.2008 13:31:48

Скорее всего, Exec = NIL.
Поставьте в коде для переменной Exec проверку на NIL после Create.
К примеру
Код: Выделить всё
Exec := TPSExec.Create;
if Assigned(Exec) then begin
..
end
else
  Writeln('Error! Exec = NIL');
GrayEddy
постоялец
 
Сообщения: 375
Зарегистрирован: 06.05.2005 09:37:56

Сообщение Shura1oplot » 23.03.2008 14:15:20

GrayEddy
Ошибка возникает в ходе выполнения скрипта. Если не использовать динамические объекты, то скрипт выполняется без ошибок.
Аватара пользователя
Shura1oplot
незнакомец
 
Сообщения: 3
Зарегистрирован: 19.03.2008 15:28:02

Сообщение GrayEddy » 23.03.2008 14:37:17

Скачал RemObjects Pascal Script. Попробую с ним поиграться.
О результатах попозже.
GrayEddy
постоялец
 
Сообщения: 375
Зарегистрирован: 06.05.2005 09:37:56


Вернуться в Сторонние средства

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru
cron