Das ist vielleicht etwas viel Text. Das liegt daran, dass ich die ganze Thematik irgendwie nicht verstehe.
Letzten Dienstag bei Embarcadero's Skill Sprint-Folge zu "AOP mit DSharp" von Nick Hodges (Aufzeichnung ist leider noch nicht hochgeladen) kam überall dieses komische
IInvokable
-Interface vor.
Auf die Frage, was das soll konnte mir der gute Herr Hodges keine konkrete Antwort geben. Nur dass es DSharp hier brauchen würde. Andere Frameworks wie
Delphi Mocks würden sich angeblich ebenso verhalten. Aus diesem Grund würde er sogar empfehlen, Interfaces grundsätzlich
allesamt von
IInvokable
statt
IInterface
abzuleiten.
Nun gut- Zum ersten mal schaue ich, was
System.IInvokable
überhaupt ist.
Dem Source nach nichts weiter als
{$M+}IInvokable = interface(IInterface) end; {$M-}
. Der Hilfe-Artikel
Aufrufbare Interfaces im Überblick spricht
Zitat:
IInvokable ist nahezu identisch mit dem Basis-Interface (IInterface), mit dem Unterschied, dass dieses Interface mit der Compiler-Option {$M+} compiliert wird. Mit der Compiler-Option {$M+} wird sichergestellt, dass das Interfaces sowie alle ihre Nachkommen
RTTI beinhalten.
. Danach fängt der Artikel leider an, irgendetwas wirres von Webservices zu reden.
Deswegen sieht es für mich bislang so aus:
Es gibt irgendwelche Mechanismen die noch auf die "alte"
RTTI aufbauen. Diese Mechanismen brauchen eine explizite Generation dieser
RTTI-Informationen für Typen mit denen sie arbeiten sollen.
Und diese Mechanismen stecken wohl in DSharp und anderswo.
Richtig soweit?
Wenn es wirklich so einfach war:
- Gibt es einen Compilerschalter mit den ich diese alten RTTI-Informationen zu ALLEN Typen hinzufügen kann? Die Größe der .exe wäre mir egal. Wenn es ginge, hat das einen Einfluss auf die Geschwindigkeit?
- Falls es keinen solchen Schalter gibt, wie füge ich explizit diese Informationen zu einem bereits vorhandenen Standardtyp (wie TProc) hinzu?