![]() |
Problem mit inc(...)
Hallo!
Ich versuche folgenden Delphi 7 Code für Delphi 2009 umzuschreiben:
Delphi-Quellcode:
Dies hat in Delphi 7 noch wunderbar funktioniert.
string1: String;
string2: String; A: TStrArray; {...} string1 := #$04; inc(byte(string1[1]),StrToInt(A[5])); string2 := #$06; inc(byte(string2[1]),StrToInt(A[5])); In Delphi 2009 kommt allerdings der Fehler: "Der Linken Seite kann nichts zugewiesen werden". Ich hab nun bereits mehrere Methoden versucht, dass Ergebnis hat aber leider nie gepasst. Hat jemand ne Idee? Coke |
Re: Problem mit inc(...)
Hallo,
in welcher Zeile kommt der Fehler? Es könnte damit zusammenhängen, ob eine strenge Prüfung von Var-Strings vorgenommen wird oder nicht. Was ist, wenn string1 = '' und darauf ein Inc und wenn in StrToInt(A[5]) etwas steht, das zusammen mit string1[1] mehr als 255 ergibt? Klar das geht, aber ich finde es mutig :P Stephan |
Re: Problem mit inc(...)
ist ein zeichen nicht 2 byte gross?
|
Re: Problem mit inc(...)
Als String deklariert schon, als AnsiString nicht.
|
Re: Problem mit inc(...)
Der Fehler kommt jeweils bei den beiden Zeilen die mit inc(.. anfangen.
Coke |
Re: Problem mit inc(...)
Das schöne ist ja, das CodeGear auch mal wieder was verbessert an seiner Sprache.
Srring[x] liefert ein Char. Byte() macht dann einen Typecast. Der Typecast wiederrum ist eine einmalige Sache und somit nur in eine Richtung nutzbar und daraus folgt, es ergibt ein konstantes Objekt. Früher hatte der Compiler auf sowas nicht geachtet, aber nun meckert er richtigerweise, da eine Typumwandlung immer einen konstantes Element liefert. Du musst deinen Code umschreiben bzw. kannst die Compiler-Magic-Optimierung von Inc() in diesem Falle nicht anwenden. Es könnte aber ohne Typecast vllt. noch gehen:
Delphi-Quellcode:
Ist ungetestet.
Inc(string[1], chr(StrToInt(...)));
|
Re: Problem mit inc(...)
Dein Code funktioniert nicht mehr, weil ein gecastetes Objekt nur dann als var-Parameter übergeben werden kann, wenn die Größen des Objekts und des Datentyps, in den gecastet wird, übereinstimmen. Byte(AnsiChar) kann also an Inc() übergeben werden, Byte(WideChar) nicht.
[edit]Ach ja, ich habe die Lösung vergessen:
Code:
sollte funktionieren.[/edit]
Inc(Word(string1[1]), StrToInt(A[5]));
jkr |
Re: Problem mit inc(...)
Zu früh gefreut, also hat CodeGear das immer noch nicht im Griff.
|
Re: Problem mit inc(...)
Zitat:
so etwas passt nicht zu pascal, in C/C++ wäre das wohl kein problem, aber hier werden (glücklicherweise) die typen geprüft :mrgreen: |
Re: Problem mit inc(...)
Danke, funktioniert :)
|
Re: Problem mit inc(...)
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:34 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