2011-10-20 10 views
5

Właściwie to próbuję użyć Rtti do implentacji ogólnej metody invokera. Powinno to działać tak:Jak uzyskać odwołanie do typu klasy po nazwie w Delphi XE?

  • będę podać nazwę klasy, metody i argumenty
  • wywołującego zrobi swoją pracę, powołując się na określoną metodę tej klasy

Więc potrzebujesz odwołania do klasy, aby uzyskać informacje o Rtti i szukać metody, którą chcę wywołać.

Czy jest jakiś sposób, aby to zrobić bez implementacji listy referencyjnej klas klas, z którymi chcę pracować?

+0

Jak planujesz uzyskać instancję klasy? –

+0

Mogę utworzyć instancję obiektu, czy otrzymam odwołanie do klasy – Haruki

Odpowiedz

8

Aby uzyskać odwołanie do klasy przy użyciu jego nazwy, należy użyć funkcji TRttiContext.FindType przekazując nazwę klasy i pobrać instancję za pomocą właściwości AsInstance, a następnie można wywołać konstruktor klasy.

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

To działało tutaj, bardzo dziękuję za odpowiedź! – Haruki

+0

Czy istnieje sposób sprawdzenia, czy wystąpienie tej klasy zostało już utworzone i czy ten obiekt jest gotowy do użycia? – Haruki

+2

To jest dla innego pytania, ale przy użyciu RTTI, które nie jest możliwe. – RRUZ

Powiązane problemy