Delphi 2010 RTTI - RttiContext.FindType - PullRequest
       34

Delphi 2010 RTTI - RttiContext.FindType

3 голосов
/ 11 августа 2010

При RttiContext.FindType('Classes.TStringList') я получаю RttiType из TStringList без проблем. Но с RttiContext.FindType('MyUnit.TMyClass') я всегда получаю ноль (конечно, MyUnit находится в пункте использования). Почему, что не так?

Пример:

unit MyUnit; 
interface 
uses 
  Classes; 
type 
  TMyClass = class(TStringList) 
  end; 
implementation 
end. 

Main unit: 
... 
uses 
  MyUnit,
... 
var 
  oCont: TRttiContext; 
  oType: TRttiType; 
begin 
  oCont := TRttiContext.Create; 
  try 
    oType := oCont.FindType('MyUnit.TMyClass'); <== oType = nil !! 
... 

Ответы [ 2 ]

8 голосов
/ 12 августа 2010

Вероятно, класс не был включен компоновщиком Delphi в окончательный исполняемый файл.Быстрая попытка может быть следующей:

  1. Объявите статический метод для вашего класса.Этот метод должен быть пустым, простым begin end.
  2. Вызовите этот статический метод в разделе инициализации этого модуля.
  3. Убедитесь, что в вашем проекте где-то есть ссылка на модуль.
  4. Теперь вы должны увидеть класс с TRttiContext.FindType.
1 голос
/ 11 августа 2010

Это может быть горстка вещей.Трудно сказать, не видя ваш код, но вот несколько предложений, чтобы посмотреть.Является ли TMyClass общедоступным типом в разделе interface ?Включено ли поколение RTTI для этого устройства?MyUnit находится в пакете, который еще не был загружен?

...