AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi String in BDS 2006 = AnsiString in RAD 2009?
Thema durchsuchen
Ansicht
Themen-Optionen

String in BDS 2006 = AnsiString in RAD 2009?

Offene Frage von "richard_boderich"
Ein Thema von Chemiker · begonnen am 10. Nov 2008 · letzter Beitrag vom 12. Nov 2008
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#1

String in BDS 2006 = AnsiString in RAD 2009?

  Alt 10. Nov 2008, 21:57
Hallo,

ist vielleicht eine blöde Frage, aber ist
String in BDS 2006 gleich AnsiString in Rad 2009?

Oder, gibt es da einen Unterschied?

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: String in BDS 2006 = AnsiString in RAD 2009?

  Alt 10. Nov 2008, 22:01
Jein, in Delphi vor D2009 ist String ein "virtueller" Typ der je nach Inhalt/Einstellung entweder ein klassischer Pascalstring ( ShortString) oder ein AnsiString ist. In d2009 ist String mit UnicodeString gleichzusetzen und die beiden anderen Typen müssen explizit deklariert werden.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: String in BDS 2006 = AnsiString in RAD 2009?

  Alt 10. Nov 2008, 22:12
Hallo mkinzler,

ich frage, wegen den EndString und StartString im AdPacket von AsyncPro die scheinen nicht mehr richtig erkannt zu werden. Normaler weise gebe ich dort immer #2 ein für STX und #3 für ETX ein, aber diese werden nicht mehr erkannt und deshalb wird kein OnStringPacket-Event mehr ausgelöst.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: String in BDS 2006 = AnsiString in RAD 2009?

  Alt 10. Nov 2008, 22:16
Zitat von mkinzler:
ein "virtueller" Typ der je nach Inhalt/Einstellung
Spielst du hier auf {$H+/-} an? Ja, es gibt (hirnamputierte) Leute, die den tatsächlich einsetzen. Ansonsten ist string[255] auch unter Delphi 2009 noch ein ShortString(=PascalString) bei dem 1 Zeichen gleich 1 Byte ist.

D2007-string = D2007-AnsiString = D2009-AnsiString <> D2009-string = D2009-UnicodeString

Wobei man mit AnsiString unter Delphi 2009 aufpassen muss. So gibt es z.B. zwar die Pos-Funktion auch für diese, nur nutzt der Compiler lieber die Unicode-Version. Der Compiler wandelt also den AnsiString zuerst in einen UnicodeString um, sucht nach dem Sub-String und liefert die Unicode-Position zurück, die sich von der Ansi-Postition unterscheiden kann. Da können schöne Zugriffsverletzungen entstehen. Also besser den Code nicht "ansifizieren" sondern lieber auf Unicode umstellen, da das einiges an Kopfschmerzen verhindert und man nebenbei all die Schlampereien und den Missbrauch von AnsiStrings als Byte-Array bereinigt.
  Mit Zitat antworten Zitat
Lasse2002

Registriert seit: 29. Nov 2004
79 Beiträge
 
RAD-Studio 2009 Pro
 
#5

Re: String in BDS 2006 = AnsiString in RAD 2009?

  Alt 10. Nov 2008, 22:18
Wobei man allerdings darauf verzichten sollte, in Delphi 2009 generell alle Strings nach AnsiStrings umzuändern. Einen AnsiString sollte man nur dort verwenden, wo man auch in D1-D2007 einen AnsiString hätte verwenden sollen.

AsyncPro ist ein typischer Fall wo AnsiStrings benötigt werden, da die Protokolle meist auf ANSI-Daten aufbauen. Es kann gut sein, daß ich in meiner Delphi 2009 Konvertierung von AsyncPro noch ein paar Dinge übersehen habe. Da steckt insgesamt schon viel Arbeit dahinter, weil bei TurboPower häufig AnsiString für Dinge verwendet worden sind, die eigentlich ein normaler String hätten sein sollen, und umgekehrt.
Lasse
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: String in BDS 2006 = AnsiString in RAD 2009?

  Alt 10. Nov 2008, 23:00
Hallo,

@jbg: nein, den Compiler-Schalter setze ich nicht ein, es geht um eine ältere Komponente(AsynPro). Wo ein string in einem AnsiString geändert worden ist, die Komponente aber sich nicht gleich wie mit einem alten String verhält.
Aber die Informationen sind schon sehr interessant.

@Lasse2002: Du hast die Konvertierung auf D 2009 vorgenommen? Sind die Komponenten getestet, oder sind die String und Char mit Suchen und Ersetzen in AnsiString und AnsiChar geändert worden?

Ein Fehler hatte ich schon gefunden und zwar können sie nicht compiliert und installiert werden, weil in der Unit: AdFaxCvt in der USES – Anweisung: Windowsm steht. Das m muss durch ein Komma ersetzt werden.
Zitat von Lasse2002:
Da steckt insgesamt schon viel Arbeit dahinter, weil bei TurboPower häufig AnsiString für Dinge verwendet worden sind, die eigentlich ein normaler String hätten sein sollen, und umgekehrt.
Das kann ich mir gut vorstellen.

Wenn ich den Fehler finde und in beseitige, bis Du an dem Ergebnis interessiert?

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
Lasse2002

Registriert seit: 29. Nov 2004
79 Beiträge
 
RAD-Studio 2009 Pro
 
#7

Re: String in BDS 2006 = AnsiString in RAD 2009?

  Alt 11. Nov 2008, 00:22
Zitat von Chemiker:
@Lasse2002: Du hast die Konvertierung auf D 2009 vorgenommen? Sind die Komponenten getestet, oder sind die String und Char mit Suchen und Ersetzen in AnsiString und AnsiChar geändert worden?
Ja, die Konvertierung stammt von mir. Auf ein globales Suchen und Ersetzen hab ich verzichtet, weil die Ergebnisse dann nur sehr bescheiden sind, falls es überhaupt compiliert. Ich hab versucht, nach Möglichkeit immer den richtigen String-Typ einzusetzen. Wobei diese Entscheidung nicht immer leicht ist. Bei AsyncPro hab ich im Zweifelsfall den AnsiString bevorzugt, weil die Protokolle meist ANSI Daten enthalten. Dahingegen darf ein String für einen Dateinamen kein AnsiString sein. Ich hab nicht sehr viel getestet, das wichtigste war erstmal, daß es compiliert.

Zitat von Chemiker:
Ein Fehler hatte ich schon gefunden und zwar können sie nicht compiliert und installiert werden, weil in der Unit: AdFaxCvt in der USES – Anweisung: Windowsm steht. Das m muss durch ein Komma ersetzt werden.
Tatsache. Ich frage mich, wie das bei mir kompiliert hat...

Zitat von Chemiker:
Wenn ich den Fehler finde und in beseitige, bis Du an dem Ergebnis interessiert?
Natürlich. Du kannst auch nochmal die aktuelle Version herunterladen, ich habe gerade noch einen Fehler beseitigt.
http://www.songbeamer.com/delphi/
Lasse
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#8

Re: String in BDS 2006 = AnsiString in RAD 2009?

  Alt 11. Nov 2008, 03:57
@jbg

Zitat:
Spielst du hier auf {$H+/-} an? Ja, es gibt (hirnamputierte) Leute, die den tatsächlich einsetzen. Ansonsten ist string[255]
Zitat Ende

Könntest du bitte auch erläutern was es mit dem Compilerschalter auf sich hat? Und mir wurde eingetrichtert, das ich solche
Deklarationen (String[zahl]) im Hinblick auf die Sicherheit tunlichst unterlassen sollte!? Trotz NoExecute, NX und DEP dürfte
sich doch daran nichts geändert haben, oder doch?
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#9

Re: String in BDS 2006 = AnsiString in RAD 2009?

  Alt 11. Nov 2008, 06:36
Hallo richard_boderich,

Zitat von Delphi-Hilfe:
In Win32 können Sie die Direktive {$H-} verwenden, wenn string als ShortString interpretiert werden soll.
Ob die Short-Strings jetzt unsicher sind, konnte ich bis her nicht feststellen. Allerdings muss ich sagen, dass in älteren Routinen diese bei mir sehr häufig verwendet habe. Sie sind in den meisten Fällen in einer Konstanten-Unit und sind dadurch relativ pflegearm.

Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: String in BDS 2006 = AnsiString in RAD 2009?

  Alt 11. Nov 2008, 06:43
Zitat:
So gibt es z.B. zwar die Pos-Funktion auch für diese, nur nutzt der Compiler lieber die Unicode-Version.
Die Chr()-Funktion hat auch massive Probleme. So ganz ausgegoren ist die "neue" Stringbehandlung von D2009 alos noch nicht. Einserseits scheuen sie alte Zöpfe wie die BDE abzuschneiden, auf der anderen Seite sorgen sie schlagartig für Kompatibilitätsprobelmen, mit welchem auch Fremdkomponentenhersteller kämpfen.
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 10:03 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