カスタム クラスをインポートするときに、Pascal Script に「create」関数と「free」関数を認識させるにはどうすればよいですか?
-
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 メソッドを認識します。