Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#9

Re: TFont(program)<>TFont(library)

  Alt 22. Mär 2006, 17:20
Zitat:
Ich komm nicht hinter den Sinn dieses Codes. Beide Objekte haben "TFont" als Classname. Was bringt mir dann ein Vergleich?

Der Vergleich der Klassennamen ist die EINZIGST mögliche Überprüfung zweier Klassen die in unterschiedlichen Modulen deklariert wurden, aber im Grunde identisch sind, auf Gleichheit zu verifizieren.
Eine andere Möglichkeit gibt es einfach nicht.

Da du OHNE Packages arbeitest sieht die Situation einfach so aus:

Modul A benutzt seine komplett eigenen Sourcen für TFont und linkt dementsprechend alle RTTI und Klassen in sein eigenes Codesegement.

Modul B benutzt seine komplett eigenen Sourcen für TFont und linkt dementsprechend alle RTTI und Klassen in sein eigenes Codesegement.

Ergo: beide Module arbeiten mit ihren eigenen Klassen, basierend auf dem identischen Source.

Ein Vergleich beider Klassen miteinander ist im Grunde unsinnig, wie auch ein Typcast über Modulgrenzen unsinnig ist. In jedem Falle stellen die beiden separaten TFont Klassen zwei absolut indifferente Klassen dar.

Klar, praktisch gesehen hat man für Modul A und B jeweils den identischen Source für TFont benutzt, sie sind also logisch gesehen identisch, aber NICHT wirklich aus Sicht des Codes zum Vergleich von Klassen.
Alle Operationen wie "is" und "as" werden damit Probleme bekommen. Die EINDEUTIGKEIT einer Klasse ist aber für das Funktionieren der kompletten VCL von entscheidender Bedeutung. Ein TForm aus Modul A ist eben nicht das gleiche TForm aus Modul B und auch nicht identisch zum TForm im eigenen Prozess.

Der obige Ansatz über IUnknown und COM Interfaces zu gehen ist dagegen richtig in diesem Falle.

Gruß Hagen
  Mit Zitat antworten Zitat