2009-11-16 3 views
1

article의 예제에 문제가 있습니다. 이 기사에서는 파스칼 스크립트에서 호출 할 수 있도록 클래스를 가져 오는 방법에 대해 설명합니다. 커스텀 클래스를 임포트하고 있지만 파스칼 스크립트가 '생성'과 '프리'기능을 인식하지 못합니다.커스텀 클래스를 가져올 때 파스칼 스크립트가 '생성'과 '프리'기능을 인식하도록하려면 어떻게해야합니까?

내 플러그인 :

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_std 및 을 추가하고 플러그인을 등록하기 전에 SIRegisterTObjectRIRegisterTObject (C 및 R은 컴파일 타임 및 런타임 버전 임)을 실행하십시오. 그러면 기본 생성자와 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을 만듭니다. uses 절에 uPSI_MyPSPlugin을 추가 한 다음 TPSImport_MyPSPlugin.Create과 추가 코드를 사용하여 플러그인을 등록해야합니다. (링크 된 웹 페이지의 네 번째 이미지를 보시오 - 이미지에 캡션 바 "ide_editor.pas"가 있습니다.) 그 시점에서 Pascal Script는 클래스를 인식하고 Create 및 Free 메소드를 인식합니다.

+0

내 코드가 혼란 스럽다면 죄송합니다. 생성 된 클래스를 사용하고 있습니다. 이것을 보여주기 위해 추가 코드를 추가했습니다. –