2009-11-16 48 views
1

我遇到了一個來自article的示例問題。這篇文章解釋瞭如何導入自己的類,以便可以從Pascal腳本中調用它們。我正在導入我的自定義類,但無法讓Pascal腳本識別「創建」和「自由」功能。如何讓Pascal腳本在導入自定義類時識別'創建'和'自由'功能?

我的插件:

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

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

我的應用程序:

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; 

我的腳本:

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

錯誤消息:

[Error] (5:25): Unknown identifier 'Create' 
[Error] (7:10): Unknown identifier 'FREE' 

回答

1

顯然你的插件類從TObject直接下降。將uPSC_stduPSR_std添加到您的項目中,然後在註冊插件之前運行SIRegisterTObjectRIRegisterTObject(C和R是Compile-time和Runtime版本)。這將設置默認構造函數和Free方法。如果這不起作用,請確保單位導入器明確指出您正在從TObject降序。

+1

謝謝。我將這兩個函數添加到生成的代碼中,並且工作正常。注意:我必須在生成的函數SIRegister_TMyPsPlugin和RIRegister_TMyPsPlugin被調用之前添加。 –

0

你沒有按照你引用的文章正確的方向。

它具體說運行單位導入器,它會生成兩個額外的文件(從MyClass.pas創建MyClass.int和uPSI_MyClass.pas)。您需要使用uPSI_MyClass.pas(當然,使用您的設備的正確文件名),並使用該設備的正確方法。

假設您的TMyPSPlugin源代碼位於MyPSPlugin.pas中,單元導入器將創建MyPSPlugin.int和uPSI_MyPSPlugin.pas。您需要將uPSI_MyPSPlugin添加到您的使用條款中,然後使用TPSImport_MyPSPlugin.Create和附加代碼註冊插件。 (請參閱您鏈接的網頁上的第四張圖片 - 圖片的標題欄上顯示「ide_editor.pas」。)此時,Pascal Script會知道您的課程,並會識別出它是Create和Free方法。

+0

對不起,如果我的代碼是混亂。我正在使用生成的類。我添加了額外的代碼來顯示這一點。 –