1

この記事の例に問題があります。この記事では、独自のクラスをインポートして Pascal スクリプトから呼び出せるようにする方法について説明します。カスタム クラスをインポートしていますが、Pascal Script に「Create」関数と「Free」関数を認識させることができません。

私のプラグイン:

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_stdandを追加して and を実行します(C と R はコンパイル時バージョンとランタイム バージョンです)。これにより、既定のコンストラクターと Free メソッドが設定されます。それでもうまくいかない場合は、ユニット インポーターが TObject の子孫であることを明確に示していることを確認してください。uPSR_stdSIRegisterTObjectRIRegisterTObject

于 2009-11-16T18:35:54.557 に答える
0

引用した記事の指示に正しく従っていませんでした。

具体的には、2 つの追加ファイルを生成するユニット インポーターを実行するように指示されています (MyClass.pas から MyClass.int と を作成しますuPSI_MyClass.pas)。uPSI_MyClass.pas(もちろん、ユニットの適切なファイル名を使用して) を使用し、そのユニットから適切なメソッドを使用する必要があります。

TMyPSPlugin のソースが MyPSPlugin.pas にあると仮定すると、ユニット インポーターは MyPSPlugin.int とuPSI_MyPSPlugin.pas. uPSI_MyPSPluginuses 句に追加してからTPSImport_MyPSPlugin.Create、追加のコードを使用してプラグインを登録する必要があります。(リンクした Web ページの 4 番目の画像を参照してください。画像には「ide_editor.pas」というキャプション バーがあります。) その時点で、Pascal Script はクラスを認識し、それが Create および Free メソッドであることを認識します。

于 2009-11-16T17:52:10.963 に答える