Como posso fazer com que o Script Pascal reconheça as funções 'Criar' e 'Grátis' ao importar uma classe personalizada?
-
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'
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.