Einzelnen Beitrag anzeigen

Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Wie vergleiche ich zwei Prozedurtypen?

  Alt 26. Nov 2018, 20:32
Delphi-Version: 10 Seattle
An einer Stelle im Code caste ich eine System.SysUtils.TProc auf eine System.Classes.TThreadProcedure , beispielsweise:
Delphi-Quellcode:
var
   proc: TProc;
begin
   TThread.Queue(nil, TThreadProcedure(proc));
end;
Ich finde dass ich das darf denn
TProc = reference to procedure; und
TThreadProcedure = reference to procedure;
Trotzdem bin ich ein vorsichtiger Mensch und möchte in meinen Tests prüfen ob diese Annahme in der jeweiligen Delphi-Version noch stimmt.


Frage: Wie prüfe ich ob TThreadProcedure und TProc kompatibel sind?

Bislang schaffe ich nur zu prüfen ob beides Typen sind die sich von IInterface ableiten (Compiler-Magic und so). Aber dann?


Delphi-Quellcode:
uses
   System.SysUtils,
   System.Classes,
   System.Rtti;
var
   rttiContext: TRttiContext;
   a, b: TRttiType;
   intf: TRttiType;
begin
   rttiContext := TRttiContext.Create();

   a := rttiContext.GetType( TypeInfo(TThreadProcedure) );
   b := rttiContext.GetType( TypeInfo(TProc) );

   // check if both descend from IInterface
   intf := rttiContext.GetType( TypeInfo(IInterface) );
   Assert( a.BaseType = intf );
   Assert( b.BaseType = intf );

   // what else?
   // a.GetMethods() = empty array :-(
end.
  Mit Zitat antworten Zitat