AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Registry ReadBinaryData Problem

Ein Thema von Darkface · begonnen am 9. Aug 2008 · letzter Beitrag vom 1. Nov 2011
Antwort Antwort
Seite 2 von 3     12 3   
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

Re: Registry ReadBinaryData Problem

  Alt 10. Aug 2008, 22:40
Ich würde wenn schon "string" als Puffer benutzt wird, diesen explizit als "AnsiString" deklarieren, vor allem im Hinblick auf das (wohl) kurz vor dem Release stehende Delphi 2009, bei dem "string" = "UnicodeString" ist und somit "SizeOf(Byte) = SizeOf(Char)" nicht mehr zutrifft.
  Mit Zitat antworten Zitat
shadowman

Registriert seit: 1. Nov 2005
48 Beiträge
 
#2

AW: Re: Registry ReadBinaryData Problem

  Alt 1. Nov 2011, 09:16
Hallo,

nach dem Umstieg auf Delphi XE hatte ich auch ein Problem mit ReadBinaryData. Die Werte wurden nicht mehr korrekt ausgelesen. Auf der Suche nach der Ursache (bzw. Lösung, denn die URsache schien klar zu sein) bin ich auf diesen Thread gestoßen.

Dieser Hinweis hier

Ich würde wenn schon "string" als Puffer benutzt wird, diesen explizit als "AnsiString" deklarieren, vor allem im Hinblick auf das (wohl) kurz vor dem Release stehende Delphi 2009, bei dem "string" = "UnicodeString" ist und somit "SizeOf(Byte) = SizeOf(Char)" nicht mehr zutrifft.
löste das Problem, allerdings frage ich mich, ob es für eine Unicode-Anwendung "gut" ist, mit AnsiStrings zu arbeiten. Es klingt ja auch so, dass die Lösung mit einem (Ansi)String-Buffer generell nicht unbedingt die beste ist.

Welche "stabile" Alternativen hat man sonst noch, wenn AnsiString keine gute Lösung ist?

Geändert von shadowman ( 1. Nov 2011 um 11:29 Uhr) Grund: Rechtschreibfehler
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.655 Beiträge
 
Delphi 12 Athens
 
#3

AW: Registry ReadBinaryData Problem

  Alt 1. Nov 2011, 09:27
Wie wäre es denn mit PByte? Für die Interpretation der Daten musst Du allerdings später selber sorgen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Registry ReadBinaryData Problem

  Alt 1. Nov 2011, 10:27
Du kannst auch einen String/UnicodeString/WideString verwenden, aber bedenke, daß dieser 2 Byte pro Char besitzt.

PS: Statt des AnsiStrings, verwendet man für sowas den RawByteString ... das ist zwar auch ein AnsiString, aber ohne Behandlung der CodePage.
Genauso, wie es den Utf8String gibt, welches einen "AnsiString" mit voreingestellter UTF-8-CodePage (CP_UTF8) darstellt.

Wobei man eben auch TBytes (ein Array of Byte) verwenden könnte, oder halt doch PByte und Co.


Bei RawByteString und TBytes hat man den Vorteil, daß sich Delphi um die Speicherverwaltung (vorallem die Freigabe) kümmert
und das sogar threadsave, über mehrere Referenzen hinweg.
(ja, man mag es kaum glauben, aber auch die RTL kann teilweise threadsave sein)



Und ja, auch in einem Unicode-Programm ist es manchmal ratsam/sinnvoll, wenn man AnsiStrings verwendet ... eben genau dann, wenn man wirklich ANSI benötigt (genau so wie man damals auch in einem ANSI-Programm den WideString nutzen konnte) oder eben wenn man einen "String" als Byte-Puffer nutzen will, denn SizeOf(AnsiChar) = SizeOf(Byte).

So war es damals eigentlich schon fahrlässig, wenn man für solche Datenpuffer den "String" verwendete, obwohl man eigentlich den AnsiString hätte nutzen müssen, weil sich der String ja ändern konnte/tat.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 1. Nov 2011 um 10:38 Uhr)
  Mit Zitat antworten Zitat
shadowman

Registriert seit: 1. Nov 2005
48 Beiträge
 
#5

AW: Registry ReadBinaryData Problem

  Alt 1. Nov 2011, 11:28
Ok, verstehe.

Vielen Dank Detlef und himitsu!
  Mit Zitat antworten Zitat
Darkface

Registriert seit: 18. Apr 2008
89 Beiträge
 
Delphi XE Professional
 
#6

Re: Registry ReadBinaryData Problem

  Alt 10. Aug 2008, 23:38
Hi und danke Toms, es scheint das dein Code das richtige macht, aber wenn ich ihn ausführe dann ist außer den Dateinamen auf meinem Desktop doch alles ziemlich kaudawelsch... liegt das am Code oder ist das eben von windows so(was ich nicht ganz glaube weil dort eigentlich icon positionen auf dem desktop gespeichert sein sollten, ich aber nicht wirklich zahlen lesen kann ...
Alexander
  Mit Zitat antworten Zitat
Darkface

Registriert seit: 18. Apr 2008
89 Beiträge
 
Delphi XE Professional
 
#7

Re: Registry ReadBinaryData Problem

  Alt 11. Aug 2008, 21:38
push? hoffe erlaubt ^^
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#8

Re: Registry ReadBinaryData Problem

  Alt 12. Aug 2008, 20:15
Frage: Warum möchtest du die Icon Positionen aus der Registry auslesen und nicht gleich direkt die Icon Positionen ermitteln?
Thomas
  Mit Zitat antworten Zitat
Darkface

Registriert seit: 18. Apr 2008
89 Beiträge
 
Delphi XE Professional
 
#9

Re: Registry ReadBinaryData Problem

  Alt 12. Aug 2008, 22:40
Weil ich bis jetzt für den einzigen weg hielt... aber das auslesen ist ja nur die eine seite, die andere fast wichtigere Seite ist auch das verändern... aber um zu wissen was ich verändere muss ich auch wissen was da ist. gibt es denn einen weg dies zu bewerkstelligen ohne den "umweg" über die regestry...?
Alexander
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#10

Re: Registry ReadBinaryData Problem

  Alt 13. Aug 2008, 05:49
Zitat von Darkface:
Weil ich bis jetzt für den einzigen weg hielt..
Wurde die nicht eine andere Möglichkeit vorgeschlagen
Thomas
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 21:33 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