Pergunta

A minha pergunta é abaixo.

Aqui está a minha configuração:

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;

Por que estou recebendo o seguinte erro quando tento compilar qualquer script.

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

Eu sei que tem a ver com a minha tentativa de importar o método NewItem no compilador PS, mas eu não sei por que ele não vai aceitar a TStringList. Eu sei que é o TStringList porque se eu tirar o param TStringList e usar apenas o método com a seguinte assinatura, em seguida, tudo funciona.

    procedure NewItem(const Caption:string);

Não consigo encontrar quaisquer referências dizendo que eu não posso passar objetos e para trás entre o compilador / script e meu código Delphi, mas eu estou começando a pensar que talvez haja uma limitação em fazer exatamente esse tipo de coisa.

Será que faz mais sentido para tentar passar um array de strings em vez de um TStringList?

Foi útil?

Solução

Se eu tivesse que adivinhar, eu diria que é provavelmente porque você não tiver registrado a classe TStringList ainda. As aulas têm de ser registrado com PascalScript antes que ele possa usá-los.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top