AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

$M+, IInvokable, RTTI - Wozu?

Offene Frage von "Der schöne Günther"
Ein Thema von Der schöne Günther · begonnen am 29. Sep 2014 · letzter Beitrag vom 27. Nov 2018
Antwort Antwort
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: $M+, IInvokable, RTTI - Wozu?

  Alt 29. Sep 2014, 11:27
Ob "alte" oder "neue" RTTI ist unerheblich, wenn man die Metadaten explizit unterdrückt, dann legt man auch die neue RTTI still.
In den Projekt-Optionen kannst Du dies global für Dein Projekt einstellen, im englischen Delphi heißt diese Option "Emit run-time type information". Die Standard-Typen erfordern hier keine weitere Behandlung, diese verfügen bereits über die Metadaten - u.a. deswegen werden EXEn ja stets eine Handbreit größer.


Ich empfinde die Aussage von Nick pauschal immer von IInvokable ableiten zu sollen, als zu kurz gegriffen. Oder einfach als falsch. Genau dann, wenn man die Metadaten braucht, mag es richtig und das Mittel der Wahl sein - wenn man die Metadaten nicht benötigt, ist es überflüssig. Und nur auf den Verdacht hin, dass man später irgendwann mal was in der Richtung benötigen könnte, würde ich meine Klassen- bzw. Interface-Architektur nicht designen wollen.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: $M+, IInvokable, RTTI - Wozu?

  Alt 29. Sep 2014, 11:58
Gesetzt mit dem Bild im Anhang habe ich den richtigen Compilerschalter erwischt- Warum bekomme ich, egal ob an oder aus, zur Laufzeit eine
Code:
EInvalidOpException: 'The type parameter "TProc" contains no RTTI. Please check for {$M+}.'
Code lasse ich weg, ich will einfach nur ein Spring.Event<TProc> anlegen.

Ich dachte, mit diesem Schalter hätte der Typ "TProc" dann die RTTI-Informationen?


Oder ist TProc hier eine Ausnahme?
Angehängte Grafiken
Dateityp: png rtti.png (3,1 KB, 12x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.672 Beiträge
 
Delphi 12 Athens
 
#3

AW: $M+, IInvokable, RTTI - Wozu?

  Alt 29. Sep 2014, 12:36
Das {$M+} gibt an, daß die Standardsichtbarkeit der Property in den nachfolgenden Klassen von Public auf Published gelegt wird.
Somit können die Streaming-/Zugriffscodes also immer diese Property finden/auflisten.
Das betrifft nicht nur IInvokable, sondern auch TPersistent/TComponent, was vorallem von der VCL verwendet wird.

Also in dieser Klasse und deren Nachfahren werden Property standardmäßig published gemacht, wenn man davor keine explizite Sichbarkeit (private/publich/...) angibt.

Published-Property landen immer in der RTTI (egal ob Alte oder neue/erweiterte RTTI), selbst wenn man alles Mögliche von der RTTI deaktivierten würde.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz