Wie kann ich sicherstellen, dass RTTI für eine Klasse verfügbar ist, ohne sie zu instanziieren?

Ich habe vor kurzem eine gepostetFrage Fragen Sie in diesem Forum nach Ratschlägen zu fehlenden RTTI-Informationen in einer ausführbaren DXE2-Datei.

Dieser Beitrag war eine abgespeckte Version meines tatsächlichen Falls. RRUZ kam zur Rettung, und so wurde die abgespeckte Version schnell behoben. Das ursprüngliche Problem besteht jedoch noch immer, und deshalb poste ich es jetzt vollständig. "Main":

program MissingRTTI;
{$APPTYPE CONSOLE}
uses
  System.SysUtils, RTTI, MyUnit in 'MyUnit.pas', RTTIUtil in 'RTTIUtil.pas';
var
  RHelp:  TRttiHelper;
begin
  RHelp := TRttiHelper.Create();
  if (RHelp.IsTypeFound('MyUnit.TMyClass')) then WriteLn('TMyClass was found.')
  else WriteLn('TMyClass was not found.');
  ReadLn;
  RHelp.Free();
end.

RTTIUtil.pas:

unit RTTIUtil;
interface
uses
  MyUnit;
type
  TRttiHelper = class(TObject)
  public
    function IsTypeFound(TypeName: string) : boolean;
  end;
implementation
uses
  RTTI;
function TRttiHelper.IsTypeFound(TypeName: string): boolean;
var
  rCtx:   TRttiContext;
  rType:  TRttiType;
begin
  Result := false;
  rCtx := TRttiContext.Create();
  rType := rCtx.FindType(TypeName);
  if (rType <> nil) then
    Result := true;
  rCtx.Free();
end;
end.

und schlussendlichMyUnit.pas:

unit MyUnit;
interface
type
  TMyClass = class(TObject)
  end;
implementation
end.

Der gewünschte Typ wurde nicht gefunden. Wenn ich mich jedoch ändereTRttiHelper.IsTypeFound Damit wird eine Instanz von instanziiert (und sofort freigegeben)TMyClasswird der Typ gefunden. Wie so:

function TRttiHelper.IsTypeFound(TypeName: string): boolean;
var
  rCtx:   TRttiContext;
  rType:  TRttiType;
  MyObj:  TMyClass;
begin
  Result := false;
  MyObj:= TMyClass.Create();
  MyObj.Free();
  rCtx := TRttiContext.Create();
  ...

Ich frage mich also, ob ich RTTI auf irgendeine Weise zur Emission zwingen kannTMyClass ohne es tatsächlich zu instanziieren?

Aktualisieren:

Auf der anderen Seite könnte ich das erwähnen, wenn ich versuche, den TRttiType mit abzurufenTRttiContext.GetType, der gewünschte Typist gefunden. Es wird also etwas RTTI ausgegeben. Überprüfen derTRttiType.IsPublic Eigentum wie von abgerufenTRttiContext.GetType ergibt einen wahren Wert, d. h. der abgerufene Typ ist öffentlich (und sollte daher mit ortbar sein)TRttiContext.FindType).

Antworten auf die Frage(2)

Ihre Antwort auf die Frage