Como posso fazer com que o Script Pascal reconheça as funções 'Criar' e 'Grátis' ao importar uma classe personalizada?

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

  •  20-09-2019
  •  | 
  •  

Pergunta

Estou tendo um problema com o exemplo disso artigo. O artigo explica como importar suas próprias classes para que possam ser chamadas de um script Pascal. Estou importando minha aula personalizada, mas não consigo fazer com que o Script Pascal reconheça as funções 'Criar' e 'Grátis'.

Meu plugin:

TMyPsPlugin = class
  public
    procedure PrintMessage(const AMessage: String);
end;

procedure TMyPsPlugin.PrintMessage(const AMessage: String);
begin
  ShowMessage(AMessage);
end;

Meu aplicativo:

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;

Meu script:

program test;
var
  Plugin: TMyPsPlugin;
begin
  Plugin := TMyPsPlugin.Create;
  Plugin.PrintMessage('Hello');
  Plugin.Free;
end.

Mensagens de erro:

[Error] (5:25): Unknown identifier 'Create'
[Error] (7:10): Unknown identifier 'FREE'
Foi útil?

Solução

Aparentemente, sua aula de plug -in desce diretamente do TObject. Adicionar uPSC_std e uPSR_std para o seu projeto e correr SIRegisterTObject e RIRegisterTObject (C e R sendo as versões de tempo de compilação e tempo de execução) antes de registrar seu plug-in. Isso configurará o construtor padrão e o método gratuito. Se isso não funcionar, verifique se o importador da unidade afirma especificamente que você está descendo do tabjeto.

Outras dicas

Você não seguiu as instruções corretamente do artigo que citou.

Ele diz especificamente para executar o importador da unidade, que gera dois arquivos adicionais (de myclass.pas que ele cria myclass.int e uPSI_MyClass.pas). Você precisa usar o uPSI_MyClass.pas (Usando, é claro, o nome do arquivo adequado para sua unidade) e use os métodos adequados dessa unidade.

Supondo que sua fonte de tmypsplugin esteja em mypsplugin.pas, o importador da unidade criaria mypsplugin.int e uPSI_MyPSPlugin.pas. Você precisaria adicionar uPSI_MyPSPlugin para sua cláusula de uso e depois usar TPSImport_MyPSPlugin.Create e o código adicional para registrar o plug -in. (Consulte a quarta imagem da página da web que você vinculou - a imagem possui uma leitura da barra de legenda "ide_editor.pas".) Nesse ponto, o Pascal Script está ciente de sua classe e reconhecerá seus métodos de criação e gratuitos.

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