2010-02-08 9 views
0

내 질문은 아래와 같습니다. 내가 어떤 스크립트를 컴파일 할 때왜이 방법을 PascalScript 컴파일러에 등록 할 수 없습니까?

interface 

    uses windows, {...,} uPSComponent_Default, uPSComponent, uPSRuntime, uPSComponent_Controls; 

    TForm1 = class(TForm) 
    //... 
    PSScript1: TPSScript; 
    PSImport_Classes1: TPSImport_Classes; 
    PSImport_Controls1: TPSImport_Controls; 
    procedure PSScript1Compile(Sender: TPSScript); 
    //... 
    Private 
    procedure NewItem(const Caption:string; const SubItems:TStringList); 
    //... 
    end; 

implementation 

    {...} 

    procedure TForm1.PSScript1Compile(Sender: TPSScript); 
    begin 
    //... 
    Sender.AddMethod(Self, @TForm1.NewItem, 'procedure NewItem(const Caption:string; const SubItems:TStringList);'); 
    //... 
    end; 

왜 나는 다음과 같은 오류가 점점 오전 :

여기 내 설정입니다.

[Error] (1:1): Unable to register function procedure NewItem(const Caption:string; const SubItems:TStringList); 

나는 그것이 PS 컴파일러로 인 newItem 방법을 가져 내 시도와 관련이있다 알고 있지만 그것은 TStringList를 접수하지 않습니다 이유를 모르겠어요. 나는 그것이 TStringList라는 것을 안다. TStringList param을 꺼내서 다음의 서명을 가진 메소드를 사용하면 모든 것이 작동하기 때문이다.

procedure NewItem(const Caption:string); 

내가 어떤 참조 내가 앞뒤로 컴파일러/스크립트 내 델파이 코드 사이의 객체를 전달할 수 없다는하지만 내가 생각하기 시작 해요 찾을 수있다 어쩌면 바로이 일의 제한 물건의 종류.

TStringList 대신 문자열 배열을 전달하는 것이 더 합리적입니까?

답변

2

내가 추측한다면 나는 아직 TStringList 클래스를 등록하지 않았기 때문이라고 말할 수 있습니다. 클래스는 PascalScript를 사용하기 전에 PascalScript에 등록해야합니다.

+0

디자인 타임 구성 요소를 포함해서는 안되지만 자동으로 포함 된 클래스를 등록해야합니까? 내 양식에 이미 TPSImport_Classes 구성 요소가 있으므로 충분하다고 생각했습니다. 그 밖의 무엇을해야합니까? –

+1

오! 나는 똑똑하지 않다. 나는 그것을 알아. PSScript 구성 요소 플러그인 목록에 디자인 타임 구성 요소를 추가해야합니다. 런타임에만 사용하기 때문에 플러그인 목록에 내 구성 요소 만 추가하고있었습니다. 당신은 또한 designtime 컴포넌트를 플러그인리스트에 추가해야만하는 것처럼 보입니다. –

+0

@ Ryan : 예, "디자인 타임"은이 문맥에서 "컴파일 시간"을 의미합니다. –

관련 문제