カスタム クラスをインポートするときに、Pascal Script に「create」関数と「free」関数を認識させるにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/1743643

  •  20-09-2019
  •  | 
  •  

質問

この例に問題があります 記事. 。この記事では、独自のクラスをインポートして Pascal スクリプトから呼び出せるようにする方法について説明します。カスタム クラスをインポートしていますが、Pascal スクリプトに「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'
役に立ちましたか?

解決

どうやら、プラグイン クラスは TObject から直接派生したもののようです。追加 uPSC_std そして uPSR_std プロジェクトに追加して実行します SIRegisterTObject そして RIRegisterTObject (C と R はコンパイル時バージョンとランタイム バージョンです) プラグインを登録する前に。これにより、デフォルトのコンストラクターと Free メソッドが設定されます。それが機能しない場合は、ユニット インポーターが TObject から派生していることを明確に示していることを確認してください。

他のヒント

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top