사용자 정의 클래스를 가져올 때 Pascal Script를 'Create'및 'Free'기능을 인식하도록하려면 어떻게해야합니까?
-
20-09-2019 - |
문제
나는 이것의 예제에 문제가 있습니다 기사. 이 기사는 파스칼 스크립트에서 호출 할 수 있도록 자신의 클래스를 가져 오는 방법을 설명합니다. 사용자 정의 클래스를 가져오고 있지만 'Create'및 'free'함수를 인식하기 위해 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'
해결책
분명히 플러그인 클래스는 Tobject에서 직접 내려갑니다. 추가하다 uPSC_std
그리고 uPSR_std
프로젝트와 실행에 SIRegisterTObject
그리고 RIRegisterTObject
플러그인을 등록하기 전에 (C 및 R은 컴파일 타임 및 런타임 버전입니다). 기본 생성자와 자유 메소드가 설정됩니다. 그래도 작동하지 않으면 장치 수입업자가 Tobject에서 내려 오는 것을 구체적으로 명시하십시오.
다른 팁
당신은 당신이 인용 한 기사에서 지시를 올바르게 따르지 않았습니다.
구체적으로 단위 수입업자를 실행한다고 말하면서 두 개의 추가 파일을 생성합니다 (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는 클래스를 알고 있으며이를 작성하고 무료 메소드임을 인식합니다.