Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Array "vergisst" Daten beim Übergeben in Prozedur
Stephan.Woebbeking - Di 15.09.09 16:53
Titel: Array "vergisst" Daten beim Übergeben in Prozedur
Hallo *!
Möglicherweise liegt's am Wetter, aber irgendwie hab ich hier eine Inkonsistenz, die mir den Nerv raubt. Zumal es so was simples ist, dass ich mich echt langsam frag, ob ich **** bin... Für den Fall, dass das so ist, dürft ihr mir das gerne sagen, ich stehe zu meinen Dummheiten! ;)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| var buf: array[1..6] of Byte; a: Integer; begin for a := 1 to 6 do begin Logging.Debug( '#1 ' + IntToStr( a ) ); buf[a] := 255; end; SendConnectSecondDevice( buf ); end;
procedure TEW3ServiceToolMainForm.SendConnectSecondDevice( MAC: array of Byte ); var a: Integer; begin AppendLineStringToMemo( 'Connect to MAC: ' + IntToStr( MAC[1] ) + ', ' + IntToStr( MAC[2] ) + ', ' + IntToStr( MAC[3] ) + ', ' + IntToStr( MAC[4] ) + ', ' + IntToStr( MAC[5] ) + ', ' + IntToStr( MAC[6] ) ); |
Ich hab jetzt einiges weggelassen, von dem ich denke, dass es nichts damit zu tun hat. Was ich machen will/muss ist ganz, ganz, ganz einfach: Einfach ein Array von 6 Byte in die Unterfunktion SendConnectSecondDevice übergeben. Aber die Ausgabe von "AppendLineStringToMemo" sieht allen Ernstes (kein Scherz!) so aus:
Delphi-Quelltext
1:
| 15.9.2009 16:38:53: Connect to MAC: 255, 255, 255, 255, 255, 96 |
Irgendjemand eine Erklärung dafür??? Ich bin auch eher ein Fan von Java, und gerade verstehe ich mehr und mehr warum, ich lasse mich aber gerne wieder etwas zurückholen. :o)
PS: Anbei noch: Die Schleifen laufen lt. Debugger RÜCKWÄRTS, d.h. fangen mit 6 an und laufen runter bis 1, ich nehme an, das ist ein Effekt der Code-Optimization??? Ist mir ja im Prinzip auch egal, fand ich bloß komisch...
Danke schonmal,
Stephan
Moderiert von
Narses: Topic aus Sonstiges (Delphi) verschoben am Di 15.09.2009 um 18:00
Tryer - Di 15.09.09 17:20
Stephan.Woebbeking hat folgendes geschrieben : |
Delphi-Quelltext 1: 2:
| buf: array[1..6] of Byte; ( MAC: array of Byte ); |
|
"array of xy" fängt normalerweise bei 0 an.
Einige Dich mit deinem Alter Ego doch auf einen einheitlichen Datentyp
TMacArray = array[1..6] of Byte :wink:
MfG,
Dirk
jaenicke - Mi 16.09.09 07:15
Stephan.Woebbeking hat folgendes geschrieben : |
| PS: Anbei noch: Die Schleifen laufen lt. Debugger RÜCKWÄRTS, d.h. fangen mit 6 an und laufen runter bis 1, ich nehme an, das ist ein Effekt der Code-Optimization??? Ist mir ja im Prinzip auch egal, fand ich bloß komisch. |
Richtig. Im Programm wird einfach das Zählregister auf Null geprüft, daher läuft die Schleife rückwärts. Wenn die Schleifenvariable benutzt wird, wird das natürlich trotzdem richtig umgesetzt. Nur der Debugger weiß davon nix und zeigt deshalb oft den optimierten falschen Wert an, weshalb man beim Debuggen die Optimierung besser ausschaltet, auch wenn der Code an sich genauso läuft.
Was Arrays angeht:
Statt direkte Werte zu benutzen, sollte man Schleifen usw. einfach von Low(DeinArray) bis High(DeinArray) laufen lassen, dann sucht es sich die Grenzen automatisch. Bzw. ab Delphi 2006 kann man ja direkt ne foreach-Schleife benutzen.
Stephan.Woebbeking - Mi 16.09.09 09:15
Wow, auf die Idee mit den Indizes wäre ich so bald wohl nicht gekommen. Wie gesagt, Java verwöhnt, wüsste nicht, dass mir sowas da schon mal untergekommen ist. ;) Auf jeden Fall vielen Dank an Euch beide!!!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!