AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TRtfLabel - Label zur Darstellung von RTF
Thema durchsuchen
Ansicht
Themen-Optionen

TRtfLabel - Label zur Darstellung von RTF

Ein Thema von Flocke · begonnen am 31. Mär 2006 · letzter Beitrag vom 18. Apr 2018
Antwort Antwort
JYPDWhite

Registriert seit: 29. Sep 2010
28 Beiträge
 
#1

AW: TRtfLabel - Label zur Darstellung von RTF

  Alt 14. Jun 2017, 13:58
Hat es hier schon jemand geschafft TRtfLabel auf 64 Bit zu verwenden?
Ich probiere das gerade und bekomme immer folgende Exception:

Zitat:
Im Projekt Project5.exe ist eine Exception der Klasse $C0000005 mit der Meldung ' c0000005 ACCESS_VIOLATION' aufgetreten.
Ich habe ein Beispielprojekt im Anhang wo ich das ganze mal nicht als Komponente für die IDE installieren muss sondern einfach von TRTFLabel eine Instanz erzeuge.

Zur Sicherheit habe ich auch die TLB für die msftedit.dll neu erzeugt aus der 64 Bit Version der DLL(RichTom.pas, die alte Version ist auch im Zip mit Unterstrich am Anfang).

Hat jemand eine Idee was hier schief läuft?
Der Aufruf von TRTFLabel.Create verhält sich bei 64Bit anders als in 32 Bit (andere Funktionen werden aufgerufen), deswegen pase ich hier auch mal beide Stacktraces.
Der 64 Bit Stacktrace geht genau bis zu der Zeile bis dann die Access_Violation auftritt.

Zitat:
System._IntfClear(Pointer(nil) as IInterface)
DelphiTextServ.TTextServices.CreateEx([])
DelphiTextServ.TTextServices.Create
RtfLabel.TLabelTextServices.Create($24BA270)
RtfLabel.TCustomRtfLabel.Create($24B2C20)
Unit5.TForm5.FormCreate($24B2C20)
Vcl.Forms.TCustomForm.DoCreate
Vcl.Forms.TCustomForm.AfterConstruction
System._AfterConstruction($24B2C20)
Vcl.Forms.TCustomForm.Create($24D0DB0)
Vcl.Forms.TApplication.CreateForm(TComponentClass( $5A3CF0),(no value))
Project5.Project5
:0000000076D059CD ; C:\WINDOWS\system32\kernel32.dll
:0000000076F3A561 ; ntdll.dll
32Bit:
Zitat:
DelphiTextServ.TTextServices.TxGetPropertyBits(646 3,0)
:6b9bb324 ; C:\WINDOWS\SysWOW64\MSFTEDIT.DLL
:6b9bb220 MSFTEDIT.CreateTextServices + 0x52
DelphiTextServ.TTextServices.CreateEx([])
DelphiTextServ.TTextServices.Create
RtfLabel.TLabelTextServices.Create($1074C90)
RtfLabel.TCustomRtfLabel.Create($1075CC0)
Unit5.TForm5.FormCreate($1075CC0)
:004fec6f TCustomForm.DoCreate + $37
:004fe8b3 TCustomForm.AfterConstruction + $17
:004fe882 TCustomForm.Create + $1A6
:005092ad TApplication.CreateForm + $79
Project5.Project5
:74e5336a kernel32.BaseThreadInitThunk + 0x12
:77129902 ntdll.RtlInitializeExceptionChain + 0x63
:771298d5 ntdll.RtlInitializeExceptionChain + 0x36
Angehängte Dateien
Dateityp: 7z RTFTest64Bit.7z (98,6 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
JYPDWhite

Registriert seit: 29. Sep 2010
28 Beiträge
 
#2

AW: TRtfLabel - Label zur Darstellung von RTF

  Alt 29. Jun 2017, 16:51
So ich möchte hier auch was zurück geben.
Ich habe es hinbekommen. Im Endeffekt musste man den ThisCallWrapper anpassen, das habe ich gelöst indem ich den in eine neue Datei für x64 ausgelagert habe. Bei den usese der anderen Units wird per Compilerdirektive entschieden welche Datei eingebunden werden soll.
Dann gab es noch ein paar Stellen wo Pointer an Windows übergeben werden diese wurden vorher in integer umgewandelt das habe ich ebenfalls geändert damit da keine Probleme auftreten sollten. Das ganze ist jetzt nicht groß getestet. Ich kann nur Sagen dass es bei mir soweit funktioniert ob es nicht noch irgendwo Probleme gibt möchte ich nicht ausschließen.
Angehängte Dateien
Dateityp: zip RTFLabel.zip (143,6 KB, 26x aufgerufen)
  Mit Zitat antworten Zitat
jas

Registriert seit: 17. Apr 2018
1 Beiträge
 
#3

AW: TRtfLabel - Label zur Darstellung von RTF

  Alt 18. Apr 2018, 08:30
Danke Flocke und JYPDWhite für die Arbeit.
Ich habe den Code auf Delphi Tokyo 32 und 64 Bit ausprobiert. Sehr schön.

Allerdings konnte ich in der Versionsauswahl im RtfLabel Example nicht auf Version 4.1 (bzw.auf MSFTEDIT.DLL) wechseln, was die Darstellung schon etwas einschränkt.

Beim Debuggen habe ich dann festgestellt, dass in RichEditDll.pas -> DllVersionNumber für die MSFTEDIT.dll die dwFileVersionMS=$A0000 ergibt.
Da nur die unteren 2 Bytes (typecast word) als VersionNumber gelesen werden, ist das Ergebnis 0 und die DLL wird nicht in der Combobox angeboten.

Wenn ich den Typecast entferne, erhalte ich zwar unsinnige Versionsnummern, kann aber die MSFTEDIT.dll auswählen und alles ist okay.

Weiß jemand, warum das so ist und wie das korrekt zu beheben ist?
  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 03:12 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