Come posso ottenere Pascal Script per riconoscere il 'creare' e le funzioni di 'free' quando si importa una classe personalizzata?

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

  •  20-09-2019
  •  | 
  •  

Domanda

Sto avendo un problema con l'esempio da questo articolo . L'articolo spiega come importare le proprie classi in modo che possano essere chiamati da uno script di Pascal. Sto importando la mia classe personalizzata, ma non riesco a Pascal Script di riconoscere le funzioni 'Crea' e 'Libero'.

Il mio plugin:

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

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

La mia app:

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;

Il mio script:

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

Messaggi di errore:

[Error] (5:25): Unknown identifier 'Create'
[Error] (7:10): Unknown identifier 'FREE'
È stato utile?

Soluzione

A quanto pare la classe plug discende direttamente da TObject. Aggiungere uPSC_std e uPSR_std al progetto ed eseguire SIRegisterTObject e RIRegisterTObject (C e R è il tempo di compilazione e le versioni runtime) prima di registrare il plugin. Che verrà istituito il costruttore di default e il metodo libero. Se questo non funziona, assicurarsi che l'importatore unità afferma esplicitamente che si sta scendendo dal TObject.

Altri suggerimenti

Non hai seguite le indicazioni correttamente dal articolo che hai citato.

Si dice specificamente per eseguire l'importatore di unità, che genera due file aggiuntivi (da MyClass.pas crea MyClass.int e uPSI_MyClass.pas). È necessario utilizzare il uPSI_MyClass.pas (utilizzando, ovviamente, il nome del file corretto per la vostra unità), e utilizzare i metodi propri di tale unità.

Supponendo che la vostra fonte per TMyPSPlugin è in MyPSPlugin.pas, l'importatore unità creerebbe MyPSPlugin.int e uPSI_MyPSPlugin.pas. Avresti bisogno di aggiungere uPSI_MyPSPlugin alla clausola uses, e quindi utilizzare TPSImport_MyPSPlugin.Create e il codice aggiuntivo per registrare il plugin. . (Vedere la quarta immagine dalla pagina web si è collegato -. L'immagine ha una barra del titolo di lettura "ide_editor.pas") A quel punto, Pascal Script è consapevole della vostra classe e riconoscerà è di creare e metodi gratis

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top