AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Umstig von BDS-2006 -> BDS-2010

Ein Thema von Schucki · begonnen am 22. Jul 2011 · letzter Beitrag vom 29. Jul 2011
Antwort Antwort
Schucki

Registriert seit: 17. Jul 2004
158 Beiträge
 
Delphi 2010 Architect
 
#1

AW: Umstig von BDS-2006 -> BDS-2010

  Alt 22. Jul 2011, 17:57
Wo genau hackt es denn ?
Die Daten werden mit...

Delphi-Quellcode:
function WriteComm( var buf; ByteCount: integer ): DWORD;
begin
  FillChar( TXOverLap, SizeOf( TXOverLap ), 0 );
  WriteFile( hCom, Buf, ByteCount, Result, @TXOverLap );
end;
...über das ComPort ausgesendet. Nur wird immer ein #0 Byte eingefügt...

43 00 53 00 44 00

Nun gehe ich davon aus das es eindeutig an dieser UNICODE Geschichte liegt.


Gruß Frank
Frank
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.989 Beiträge
 
Delphi 12 Athens
 
#2

AW: Umstig von BDS-2006 -> BDS-2010

  Alt 22. Jul 2011, 18:02
Ja, richtig. Denn bei Ansizeichen ist das jeweils zweite Byte in einem Unicodestring immer Null.

Viel hin- und herzukonvertieren sollte da nicht sein. Solange du den String als Datencontainer nutzt, sollte es immer explizit ein AnsiString sein. Erst, wenn du damit etwas machst, muss einmal umgewandelt werden (und natürlich umgekehrt, wenn du Daten an den COM Port übergibst).

Wo da mehr konvertiert werden könnte, fällt mir gerade gar nicht ein.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Schucki

Registriert seit: 17. Jul 2004
158 Beiträge
 
Delphi 2010 Architect
 
#3

AW: Umstig von BDS-2006 -> BDS-2010

  Alt 22. Jul 2011, 18:15
Ja danke für die Antworten...

Und wie bekomme ich nun das Programm dazu alle Daten nicht als UNICODE auszusenden?

Gruß Frank
Frank
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Umstig von BDS-2006 -> BDS-2010

  Alt 22. Jul 2011, 18:21
Indem du alles was als ANSI versendet werden soll auch als ANSI bereitstellst?

Und genau deswegen sollten Daten, die exportiert/versendet/gespeichert werden sollen
auch nur als statische Typen deklariert sein, damit sich dort niemals etwas verändern kann.

also kein Integer, Cardinal, Char, PChar, String, NativeInt, NativeUInt, Pointer usw.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (22. Jul 2011 um 18:24 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.277 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Umstig von BDS-2006 -> BDS-2010

  Alt 22. Jul 2011, 21:01
Hallo,

TXOverLap als AnsiString definieren.


Heiko
Heiko
  Mit Zitat antworten Zitat
Schucki

Registriert seit: 17. Jul 2004
158 Beiträge
 
Delphi 2010 Architect
 
#6

AW: Umstig von BDS-2006 -> BDS-2010

  Alt 25. Jul 2011, 11:42
Hallo und Danke für Eure Antworten.
So wie ich es nun verstanden habe ist es wohl so das ich meinen gesamten Quelltext durchgehen kann und alle Typen vom Typ String auf AnsiString umstellen muss damit es wieder funktioniert wie es soll.

Zumindest alle Sachen wo ich 8bit Zeichen als Daten verarbeite.

EDIT:

Hmm irgendwie habe ich noch nicht verstanden wann ich nun auf den Typen String und wann auf den Typen AnsiString zu setzen ist. Ich habe gut 80 Hinweise das ich wild hin und her kopiere.

[DCC Warnung] MyTools.pas(1149): W1057 Implizite String-Umwandlung von 'AnsiString' zu 'string'
[DCC Warnung] MyTools.pas(1149): W1058 Implizite String-Umwandlung mit potenziellem Datenverlust von 'string' zu 'AnsiString'

Delphi-Quellcode:
...
  Result:=Result+IntToHex(bytCrc,2)+']';
...

Wie muss das behandelt werden damit die verschwinden?

Gruß Frank
Frank

Geändert von Schucki (25. Jul 2011 um 22:30 Uhr) Grund: _auf dem Schlauch stehend_
  Mit Zitat antworten Zitat
Schucki

Registriert seit: 17. Jul 2004
158 Beiträge
 
Delphi 2010 Architect
 
#7

AW: Umstig von BDS-2006 -> BDS-2010

  Alt 29. Jul 2011, 08:33
Indem du alles was als ANSI versendet werden soll auch als ANSI bereitstellst?

Und genau deswegen sollten Daten, die exportiert/versendet/gespeichert werden sollen
auch nur als statische Typen deklariert sein, damit sich dort niemals etwas verändern kann.

also kein Integer, Cardinal, Char, PChar, String, NativeInt, NativeUInt, Pointer usw.
Ich muss das nochmal aufgreifen da ich allem Anschein nach noch Probleme habe ich kann zwar Sachen aussenden aber die Anwendung läuft nicht rund. Ich habe auch noch 312 Warnungen wegen ANSI<>UNICODE Wandlungen. Das wird der Grund sein

Wie sieht eine Verwendung von statischen Variablen in Delphi aus? Kenne das bisher nur von C.

Bitte helft mir mal auf die Sprünge.
Gruß Frank
Frank
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.989 Beiträge
 
Delphi 12 Athens
 
#8

AW: Umstig von BDS-2006 -> BDS-2010

  Alt 29. Jul 2011, 08:50
Wie sieht eine Verwendung von statischen Variablen in Delphi aus? Kenne das bisher nur von C.
Gemeint ist hier nicht das selbe.
Wenn du in Delphi den Typ PChar benutzt, kann das je nach Delphiversion PAnsiChar oder PWideChar sein. Und String kann AnsiString oder UnicodeString sein. Und auch solche Metatypen wie Integer sind nicht auf eine bestimmte Größe festgelegt.

Mit statisch war hier gemeint, dass du überall explizit PWideChar, LongInt usw. nutzen solltest, damit es keine Missverständnisse geben kann.

Was die Warnungen angeht, da sind vor allem welche wichtig, in denen steht bedenkliche Typumwandlung.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Schucki

Registriert seit: 17. Jul 2004
158 Beiträge
 
Delphi 2010 Architect
 
#9

AW: Umstig von BDS-2006 -> BDS-2010

  Alt 29. Jul 2011, 15:03
Hallo!

Ok dann muss ich mich nun darum kümmern das alle Sachen wo ein AnsiString mit Funktionen bearbeitet wird die einen String zurück geben auch wieder in AnsiString gewandelt werden?

Delphi-Quellcode:
...
var astrTmp:AnsiString;

astrTmp:=AnsiString(IntToString(123)));
...
Das wird eine Weile Dauern bis ich alles durch habe...

Gruß Frank
Frank
  Mit Zitat antworten Zitat
Antwort Antwort

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 08:41 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