Come posso ottenere Pascal Script per riconoscere il 'creare' e le funzioni di 'free' quando si importa una classe personalizzata?
-
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'
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