![]() |
WriteBinary Registry - Datenformat
Hallo zusammen,
stehe gerade etwas auf dem Schlauch. In meinem aktuellen Projekt (noch in Delphi 6) werden mit Write- & ReadBinary aus der Unit Registry Druckereigenschaften (DEVMODE) gelesen & geschrieben. Geht auch, funktioniert aber nicht: Im Regedit sieht der Original - Eintrag z.B. so aus: 43 00 54 00 EA 00 etc. Wenn ich über WriteBinary schreibe, erhalte ich die folgende Ansicht: 43 54 EA … -> fehlt also jeweils das 2. Byte (0). Wird dann leider auch vom Druckertreiber nicht erkannt. Was übersehe ich? |
AW: WriteBinary Registry - Datenformat
Unicode <-> Nicht Unicode?
|
AW: WriteBinary Registry - Datenformat
Stimmt - das könnte eine Erklärung sein. Eine Idee, wo ich das umstelle?
Der WriteBinary Befehl in meinem Programm sieht wie folgt aus: reg.WriteBinaryData(device,printerdevmode,devmodes ize); wobei printerdevmode vom Typ tdevmode ist. Problem von Delphi6? |
AW: WriteBinary Registry - Datenformat
Da wird es jetzt eher schwierig was sinnvolles als Tipp abzugeben.
Delphi würd' ich jetzt erstmal keine Schuld zuweisen, binär ist binär, egal was da drinne steht, ob nun jedes zweite Byte 00 ist oder nicht, sollte bei diesem Datentyp eigentlich eher egal sein. Den Inhalt des Binärtypes hast Du "irgendwo" her, vom Drucker, über 'ne API ... (keine Ahnung). Kannst Du diese Werte irgendwie auslesen? Wenn ja, einmal mit Delphi 6 und einmal mit dem aktuellen Delphi? Diese Werte dann vergleichen, gibt's Unterschiede? Von was für 'nem Drucker reden wir hier, hat der irgendwas besonderes oder wurde da nur das Datenformat zwischen zwei Treiberversionen, Windowsversionen, werwiewowasauchimmer geändert und Du stolperst hier nur gerade über einen Nebeneffekt, der suggeriert, dass die Ursache bei Delphi 6 liegen könnte? |
AW: WriteBinary Registry - Datenformat
Ausgelesen wird hiermit:
gpResult := WinSpool.GetPrinter( PrinterHandle, LEVEL_2, pBuffer, bytesNeeded, @bytesNeeded ); if gpResult then begin printerInfo := PPrinterInfo2(pBuffer)^; move(printerInfo.pDevMode^,printerdevmode,printerI nfo.pDevMode^.dmSize+printerInfo.pDevMode^.dmDrive rExtra); end; Es geht darum, bestimmte Druckeigenschaften (doppelseitig etc.) zu setzten und mit einer Arbeitsdatei zusammen zu speichern. Sind Standarddrucker von HP. Ich muss mal schauen, wo hier Unicode auftaucht und wo nicht. |
AW: WriteBinary Registry - Datenformat
Mach Dir bitte zwei Programmversionen, eine Delphi 6 und eine aktuelles Delphi.
Stimmen die gelesenen Werte überein? |
AW: WriteBinary Registry - Datenformat
Habe erstmal eine lauffähige Version mit Umwegen.
- devmode per copymemory in ein Byte Array kopieren, - dann dieses in ein 2. Array kopieren, aber in 2er Schritten und die 0 manuell einfügen Probiere es morgen aber mal in der Fa. mit der aktuellen Version aus. Interessiert mich dann doch :-D |
AW: WriteBinary Registry - Datenformat
Hmm...
Zitat:
Das ist murks.... D6 verwendet von GetPrinter immer per default die ANSI-Version, welche ein PRINTER_INFO_2 mit Ansi-Strings liefert. Verwende stattdessen direkt GetPrinterW mit PRINTER_INFO_2W und Du erhälst alle Strings als WideSting, somit incl. des 2. Bytes je Char. |
AW: WriteBinary Registry - Datenformat
Perfekt - hat bestens funktioniert. Den Murks habe ich schon gelöscht :-D:-D:-D
|
AW: WriteBinary Registry - Datenformat
In diesem Zusammenhang noch eine Frage:
Gibt es eine Möglichkeit DevmodeA und DevmodeW gegenseitig zu konvertieren? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 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 by Thomas Breitkreuz