Как мне заставить Pascal Script распознавать функции create и free при импорте пользовательского класса? - PullRequest
1 голос
/ 16 ноября 2009

У меня проблема с примером из статьи . В статье объясняется, как импортировать ваши собственные классы, чтобы их можно было вызывать из скрипта Pascal. Я импортирую свой пользовательский класс, но не могу заставить скрипт Pascal распознавать функции «Создать» и «Бесплатно».

Мой плагин:

TMyPsPlugin = class
  public
    procedure PrintMessage(const AMessage: String);
end;

procedure TMyPsPlugin.PrintMessage(const AMessage: String);
begin
  ShowMessage(AMessage);
end;

Мое приложение:

procedure TForm1.FormCreate(Sender: TObject);
var
  Plugin: TPSPlugin;
begin
  Plugin := TPSImport_MyPsPlugin.Create(Self);
  TPSPluginItem(ps.Plugins.Add).Plugin := Plugin;
end;

procedure TForm1.bCompileClick(Sender: TObject);
begin
  ps.Script.Text := mScript.Text;
  if ps.Compile then
    begin
      if ps.Execute then
        ShowMessage('Done.')
      else
        ShowMessage('Execution Error: ' + Ps.ExecErrorToString);
    end
  else
    HandleError;
end;

Мой сценарий:

program test;
var
  Plugin: TMyPsPlugin;
begin
  Plugin := TMyPsPlugin.Create;
  Plugin.PrintMessage('Hello');
  Plugin.Free;
end.

Сообщения об ошибках:

[Error] (5:25): Unknown identifier 'Create'
[Error] (7:10): Unknown identifier 'FREE'

Ответы [ 2 ]

1 голос
/ 16 ноября 2009

Видимо, ваш класс плагинов происходит непосредственно от TObject. Добавьте uPSC_std и uPSR_std к своему проекту и запустите SIRegisterTObject и RIRegisterTObject (C и R - версии для времени компиляции и времени выполнения) перед регистрацией вашего плагина. Это установит конструктор по умолчанию и метод Free. Если это не сработает, убедитесь, что импортер модулей специально указывает, что вы спускаетесь с TObject.

0 голосов
/ 16 ноября 2009

Вы не правильно следовали инструкциям из статьи, которую цитировали.

В нем, в частности, говорится, что нужно запустить импортер модулей, который генерирует два дополнительных файла (из MyClass.pas он создает MyClass.int и uPSI_MyClass.pas). Вам нужно использовать uPSI_MyClass.pas (используя, конечно, правильное имя файла для вашего устройства) и использовать правильные методы из этого устройства.

Предполагая, что ваш источник для TMyPSPlugin находится в MyPSPlugin.pas, импортер модулей создаст MyPSPlugin.int и uPSI_MyPSPlugin.pas. Вам нужно будет добавить uPSI_MyPSPlugin к вашему предложению использования, а затем использовать TPSImport_MyPSPlugin.Create и дополнительный код для регистрации плагина. (См. Четвертое изображение с веб-страницы, на которую вы ссылаетесь - на изображении есть строка заголовка с надписью «ide_editor.pas».) В этот момент Pascal Script знает о вашем классе и распознает его методы Create и Free.

...