1

我对本文中的示例有疑问。本文解释了如何导入您自己的类,以便可以从 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'
4

2 回答 2

1

显然您的插件类直接来自 TObject。uPSC_std在注册插件之前,将and添加uPSR_std到您的项目并运行SIRegisterTObjectand RIRegisterTObject(C 和 R 是编译时和运行时版本)。这将设置默认构造函数和 Free 方法。如果这不起作用,请确保单元导入器明确声明您是从 TObject 下降的。

于 2009-11-16T18:35:54.557 回答
0

您没有正确遵循您引用的文章中的指示。

它特别说要运行单元导入器,它会生成两个附加文件(从 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 方法。

于 2009-11-16T17:52:10.963 回答