0

私の質問は以下です。

これが私のセットアップです:

interface 

  uses windows, {...,} uPSComponent_Default, uPSComponent, uPSRuntime, uPSComponent_Controls;

  TForm1 = class(TForm)
    //...
    PSScript1: TPSScript;
    PSImport_Classes1: TPSImport_Classes;
    PSImport_Controls1: TPSImport_Controls;
    procedure PSScript1Compile(Sender: TPSScript);
    //...
  Private
    procedure NewItem(const Caption:string; const SubItems:TStringList);
    //...
  end;

implementation

  {...}

  procedure TForm1.PSScript1Compile(Sender: TPSScript);
  begin
    //...
    Sender.AddMethod(Self, @TForm1.NewItem,  'procedure NewItem(const Caption:string; const SubItems:TStringList);');
    //...
  end;

スクリプトをコンパイルしようとすると、次のエラーが発生するのはなぜですか。

[Error] (1:1): Unable to register function procedure NewItem(const Caption:string; const SubItems:TStringList);

NewItem メソッドを PS コンパイラにインポートしようとしたことが関係していることはわかっていますが、TStringList を受け入れない理由がわかりません。TStringList パラメーターを取り出して、次のシグネチャを持つメソッドを使用するだけですべてが機能するため、それが TStringList であることはわかっています。

    procedure NewItem(const Caption:string);

コンパイラ/スクリプトと Delphi コードの間でオブジェクトをやり取りできないという参照は見つかりませんが、まさにこのタイプのことを行うには制限があるのではないかと考え始めています。

TStringList の代わりに文字列の配列を渡そうとした方が理にかなっているでしょうか?

4

1 に答える 1

2

推測すると、おそらく TStringList クラスをまだ登録していないことが原因だと思います。クラスを使用する前に、クラスを PascalScript に登録する必要があります。

于 2010-02-08T22:42:35.127 に答える