2016-07-21 1 views
2

Delphi 7의 배열/구분 문자열에서 클래스/개체의 지정된 메서드 매개 변수 이름을 가져 오는 방법이 있습니까? 어떻게 든 좋아요 :델파이에서 메소드 param 이름 배열 /리스트를 얻는 방법?

var 
    s : string; 
    aSL : TStringList; 
begin 
    ... 
    // using rtti calls in TMethodUtility.collectParamNames 
    s := TMethodUtility.collectParamNames(TStringList.addObject); 
    // or 
    TMethodUtility.collectParamNames(TStringList.addObject, aSL); 
    ... 
end; 

미리 감사드립니다.

+0

'TString/List'에'AddItem()'메소드가 없습니다. 대신에'Add()'와'AddObject()'가 있습니다. –

+0

확인. 나는 그것을 바로 잡았다. –

답변

4

기술적으로는 (그렇지 않으면 IDE의 양식 디자이너가 디자인 타임에 구성 요소 이벤트 처리기의 코드를 생성 할 수 없습니다.) 그러나 목표에 방해가되는 중요한주의 사항이 있습니다. 해결) :

  • 필요한 RTTI

    published로 선언 특성 생성됩니다 (예) 구성 요소 이벤트와 같은. RTTI는 메서드 자체 (심지어 published 것) 또는 published이 아닌 속성에 대해서 생성되지 않습니다.

  • TObject 그러나 당신은 혼자하는 방법 포인터에서 필요한 RTTI를 얻을 수 없다 (이벤트 핸들러를 접선 할 때 DFM 스트리밍 시스템이 사용)을 published 방법의 메모리 주소를 얻기위한 공공 MethodAddress() 방법이있다.

IF 당신이하는 published 이벤트의 에 주어진 방법 포인터를 일치시킬 수 있습니다 다음 이벤트의 RTTI에서 매개 변수 이름을 추출 할 수 있습니다. TypInfo.GetPropInfo() 함수를 사용하여 이벤트의 TypInfo.PPropInfo 포인터를 구하여 다음 TypInfo.PTypeData 포인터를 얻기 위해 TypInfo.GetTypeData() 함수의 PropType 필드 값을 전달하고, 그런 다음 (ParamNameTypeName 필드를 포함하는 레코드의 배열이다)의 ParamList 필드를 통해 반복 할 .

Getting the parameters of published methods :

는 자세한 내용이 주제에 대한 다음 블로그 문서를 참조하십시오.

당신이 시도하고, 범용 솔루션 따라서 델파이 2010 년에 도입 된 Extended RTTI을 필요로 들어 7. 확장 된 RTTI가 published 항목에 한정되지 않고, 델파이에서 사용할 수 없습니다, 그리고보다 훨씬 자세한입니다 구식 RTTI가 제공하는 것.

관련 문제