![]() |
Indy Umstellung Delphi 2006 auf Delphi 2010
Hallo Forum,
ich habe letzte Woche Delphi 2010 installiert und bin nun dabei meine Projekte wieder lauffähig zu bekommen. Nun habe ich ein Problem das mit den Indy Komponenten zusammen hängt. Ich habe einen IdUDPServer und muss damit einen Broadcast erzeugen damit sich meine Hardware im Netzwerk mit ihrer zugehörigen IP Adresse meldet und ich mit ihr dann Verbindung aufnehmen kann. Das ganze hat unter Delphi 2006 immer Problemlos funktioniert. Mit Delphi 2010 haben sich nun wohl auch schon die Übergabeparameter der Events geändert die der Server auslöst, das konnte ich nun aber schon anpassen. Allerdings wird mein Broadcast nicht mehr richtig ausgeführt. Ich rufe das ganze gleich auf wie unter Delphi 2006, allerdings sehe ich im Netzwerksniffer dass die Daten nicht wie unter Delphi 2006 verschickt werden sondern verdreht sind. Ich kann mir da momentan gar keinen Reim drauf machen. Hat jemand von Euch eine Idee?
Delphi-Quellcode:
Unter Delphi 2006 sagt mit der Netzwerksniffer Wireshark dass 4 Byte mit den Daten: 000000F6 verschickt wurden
var
s : String; begin s := #$00 + #$00 + #$00 + #$F6; IdUDPServer1.Broadcast( s, 30718 ); end; Unter Delphi 2010 sagt mit der Netzwerksnniffer dass 4 Byte mit den Daten: 0000006F verschickt wurden. Dass die Werte verdreht sind hat mich erst gewundert, ich habe dann mal andere Werte verschickt und das muss wohl Zufall sein. Danke für jeden Hinweis. |
Re: Indy Umstellung Delphi 2006 auf Delphi 2010
Das liegt wohl mit dem Unicode zusammen
bis D2007 war es intern so definiert
Delphi-Quellcode:
ab D2009 ist es jetzt so
var
s : AnsiString; begin
Delphi-Quellcode:
var
s : UnicodeString; begin
Delphi-Quellcode:
bzw.
var
s : AnsiString; begin // vvvvvv den Wert explizit festlegen // vvvvvv und nicht über CodePage umrechnen // vvvvvv (die 00 ist dabei wichtig) s := #$00 + #$00 + #$00 + #$00F6; IdUDPServer1.Broadcast( s, 30718 ); end;
Delphi-Quellcode:
aber bei #$0000 bis #$007F stimmen die Werte (ASCII) sowieso überein
s := #$0000 + #$0000 + #$0000 + #$00F6;
siehe auch Threads wie diesen ![]() |
Re: Indy Umstellung Delphi 2006 auf Delphi 2010
danke für deine schnelle Antwort. ich habe folgendes versucht:
Delphi-Quellcode:
hat aber nix gebracht, kommt drotzdem "6F" anstellen von "F6" über das Netzwerk
var
s : AnsiString; begin s := #$0000 + #$0000 + #$0000 + #$00F6; IdUDPServer1.Broadcast( s, 30718 ); end; |
Re: Indy Umstellung Delphi 2006 auf Delphi 2010
hmm, versuch es mal so:
Delphi-Quellcode:
Aber da Broadcast nur String und TIdBytes anbietet, würde ich dir eher empfehlen es über TIdBytes zu lösen:
var s: RawByteString;
begin s := #$0000 + #$0000 + #$0000 + #$00F6; IdUDPServer1.Broadcast( s, 30718 ); end; var s: RawByteString; begin SetLength(s, 4); s[1] := #$0000; s[2] := #$0000; s[3] := #$0000; s[4] := #$00F6; IdUDPServer1.Broadcast( s, 30718 ); end;
Delphi-Quellcode:
var s: TIdBytes;
begin SetLength(s, 4); s[0] := $00; s[1] := $00; s[2] := $00; s[3] := $F6; IdUDPServer1.Broadcast( s, 30718 ); end; |
Re: Indy Umstellung Delphi 2006 auf Delphi 2010
Ok, habe nur den Index auf 0 korrigiert, dann geht es
Delphi-Quellcode:
Jetzt muss ich mal mein komplettes Projekt dazu umstellen. Danke für die schnelle Hilfe
var s: TIdBytes;
begin SetLength(s, 4); s[0] := $00; s[1] := $00; s[2] := $00; s[3] := $F6; IdUDPServer1.Broadcast( s, 30718 ); end; |
Re: Indy Umstellung Delphi 2006 auf Delphi 2010
Ja, daß mit der 0 war mir dann auch schon aufgefallen :oops:
Ansonsten bieten die Indy auch irgendwo Konvertierungsroutinen, für eine String<>TIdBytes-Umwandlung. Wenn es da auch eine AnsiString-Unterstützung gibt, dann wäre das eventuell auch noch was Praktisches. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:39 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