2011-10-20 2 views
5

나는 실제로 Rtti를 사용하여 일반적인 메소드 호출자를 암시하려고합니다. 그것은 다음과 같이 작동합니다 :Delphi XE에서 클래스 이름 참조를 가져 오는 방법은 무엇입니까?

  • 내가 호출자가

그래서이 클래스의 지정된 메소드를 호출하여 작업을 할 것입니다

  • 클래스 명, 메소드 명, 및 인수를 제공 해드립니다 Rtti 정보를 얻고 내가 호출하길 원하는 메소드를 찾으려면 클래스 참조가 필요합니다.

    내가 작업하고자하는 클래스의 클래스 참조 목록을 구현하지 않으면이를 수행 할 수있는 방법이 있습니까?

  • +0

    클래스 인스턴스를 어떻게 잡을 계획입니까? –

    +0

    클래스 참조를 얻었는지 여부에 관계없이 객체를 인스턴스화 할 수 있습니다. – Haruki

    답변

    8

    그의 이름을 사용하여 클래스 참조를 얻으려면 TRttiContext.FindType 함수를 사용하여 클래스 이름을 전달하고 AsInstance 속성을 사용하여 인스턴스를 검색해야합니다. 그러면 클래스의 생성자를 호출 할 수 있습니다.

    var 
        Instance : TRttiInstanceType; 
        ctx : TRttiContext; 
        mClass : TValue; 
    begin 
        ctx := TRttiContext.Create; 
        Instance := ctx.FindType(ClassName).AsInstance; //ClassName is something like 'Classes.TStringList'; 
        mClass := Instance.GetMethod('Create').Invoke(Instance.MetaclassType,[]); 
    
        //do your stuff here 
    
    
    end; 
    
    +0

    여기에서 일 했으므로 대단히 감사합니다! – Haruki

    +0

    이 클래스의 인스턴스가 이미 인스턴스화되어 있고이 객체를 사용하고 있는지 확인할 수있는 방법이 있습니까? – Haruki

    +2

    이것은 다른 질문이지만 가능하지 않은 RTTI를 사용하는 것입니다. – RRUZ