AGB  ·  Datenschutz  ·  Impressum  







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

TFont(program)<>TFont(library)

Ein Thema von chaosben · begonnen am 21. Mär 2006 · letzter Beitrag vom 23. Mär 2006
Antwort Antwort
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#1

TFont(program)<>TFont(library)

  Alt 21. Mär 2006, 15:11
Hi tu oll!

Das obige Problem ist ja hinreichend bekannt. Ein TFont-Objekt in einer library unterscheidet sich von einem TFont-Objekt in einem program.
Gut, nehmen wir an, ich finde micht damit ab. Kennt einer (es dürfen auch mehrere sein ) ein Workaround außer der Kompilierung mit Packages?

Jeder noch so windige Tip ist willkommen.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#2

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

  Alt 21. Mär 2006, 15:24
Schau Dir mal an, in welcher unit der entspr. TFont deklariert wurde.
Dann gehst Du z.B. hin, schreibst die entspr. unit des programmes mit in die uses deiner library. Wenn Du dann eine Variable von diesem Typ deklarieren willst, gib einfach die passende unit mit an "var test = wasweissich.TFont;"
In Delphi gibt es leider einige inkompatible doppeldeklarationen, deshalb gehe ich mal davon aus, dass es hier das gleiche ist.
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#3

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

  Alt 21. Mär 2006, 15:29
Zitat von chaosben:
Das obige Problem ist ja hinreichend bekannt. Ein TFont-Objekt in einer library unterscheidet sich von einem TFont-Objekt in einem program.
Gut, nehmen wir an, ich finde micht damit ab. Kennt einer (es dürfen auch mehrere sein ) ein Workaround außer der Kompilierung mit Packages?
Du kannst als Hack wenn du sicher bist das die Compiler-Version + Compiler-Einstellungen in der Exe und DLL gleich ist mittels harten Cast (TFont(meinFontZeiger)) arbeiten, aber das wird dir nicht überall gelingen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von negaH
negaH

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

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

  Alt 21. Mär 2006, 17:38
Einzigst richtige Lösung ist der Vergleich über ClassName:

  if Library.Font.ClassNameIs(TFont.ClassName) then mit der Hoffnung das beide Klassen, also der in der Library und des eigenen Modules, die identische Klassennamen besitzen auch die gleichen Klassenimplementierungen darstellen. Dies trifft nur dann zu wenn beides, Library und Modul mit der exakt gleichen Kopie der Sourcen kompiliert wurden.

Nimm Packages, das macht es absolut sicher.

Gruß Hagen
  Mit Zitat antworten Zitat
Benutzerbild von mirage228
mirage228

Registriert seit: 23. Mär 2003
Ort: Münster
3.750 Beiträge
 
Delphi 2010 Professional
 
#5

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

  Alt 21. Mär 2006, 18:22
Oder Du benutzt das Delphi-Referenz durchsuchenIFontDisp Interface zur Kommunikation, es wird auch von TFont unterstützt

mfG
mirage228
David F.

May the source be with you, stranger.
PHP Inspection Unit (Delphi-Unit zum Analysieren von PHP Code)
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#6

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

  Alt 22. Mär 2006, 12:05
Danke für eure Antworten.

@negaH:
Zitat von chaosben:
Kennt einer (es dürfen auch mehrere sein Smile ) ein Workaround außer der Kompilierung mit Packages?
Es geht einfach nicht mit Packages. Unmöglich. Ausgeschlossen.

Zitat von negaH:
Einzigst richtige Lösung ist der Vergleich über ClassName:
  if Library.Font.ClassNameIs(TFont.ClassName) then
Ich komm nicht hinter den Sinn dieses Codes. Beide Objekte haben "TFont" als Classname. Was bringt mir dann ein Vergleich?
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
Benutzerbild von FriFra
FriFra

Registriert seit: 19. Apr 2003
1.291 Beiträge
 
Delphi 2005 Professional
 
#7

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

  Alt 22. Mär 2006, 12:10
Hast Du denn auch schonmal nachgeschaut, WO die jeweiligen TFont deklariert wurden (welche unit)? DA dürfte der Hund begraben liegen, denn TFont kann <> TFont sein...
Elektronische Bauelemente funktionieren mit Rauch. Kommt der Rauch raus, geht das Bauteil nicht mehr.
  Mit Zitat antworten Zitat
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#8

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

  Alt 22. Mär 2006, 12:58
Ja, meines erachtens kommen beide aus der Unit "Graphics". In einem der vielen Threads in Google.Groups stand aber, das der Hase angeblich bei "TPersistent" im Pfeffer liegt. Aber ich werde das in der nächsten Stunde genauer untersuchen. Wenn ich also bis 14.00 Uhr keine weiteren Lebenszeichen von mir gebe, hab ich mich wahrscheinlicht mit einem Pointer erdrosselt.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat
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, 18: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
Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#10

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

  Alt 23. Mär 2006, 10:53
Nach der Lektüre von Beschreibungen der VMT dämmert es jetzt ein wenig. Danke für eure Hilfe.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  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 14:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz