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.