2011-10-20 8 views
5

In realtà sto cercando di usare Rtti per impiantare un invoker di metodo generico. Dovrebbe funzionare in questo modo:Come ottenere il riferimento al tipo di classe in base al nome in Delphi XE?

  • potrò fornire il nome della classe, nome del metodo, e gli argomenti
  • l'invoker farà il suo lavoro invocando il metodo specificato di questa classe

Così ho serve il riferimento di classe per ottenere le sue informazioni Rtti e cercare il metodo che voglio invocare.

C'è un modo per farlo senza implementare una lista di riferimento di classe delle classi con cui voglio lavorare?

+0

Come state pianificando di ottenere un'istanza della classe? –

+0

Posso istanziare un oggetto se ottengo il riferimento di classe – Haruki

risposta

8

Per ottenere il riferimento alla classe utilizzando il suo nome, è necessario utilizzare la funzione TRttiContext.FindType passando il Nome della classe e recuperare l'istanza utilizzando la proprietà AsInstance e quindi è possibile chiamare il costruttore della classe.

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

Ha funzionato qui, grazie mille per la risposta! – Haruki

+0

C'è un modo per vedere se ho già istanziato un'istanza di questa classe e ottenere questo oggetto per l'uso? – Haruki

+2

Questo è per un'altra domanda, ma usando RTTI che non è possibile. – RRUZ