![]() |
Delphi-Version: 5
Der linken Seite kann nichts zugewiesen werden
Hallo!
Ich migriere grad ein Projekt von D7 nach XE4 und bei folgender Zeile bekomme ich die besagte Fehlermeldung:
Delphi-Quellcode:
Der Code compiliert im D7 problemlos aber eben nicht in XE4 :-(
Byte(bufPtr[ix]) := StrToIntDef('$' + Copy(hexDump,1 + ix*2,2) ,0);
Danke für eure Hilfe! Cody |
AW: Der linken Seite kann nichts zugewiesen werden
Was für einen Typ hat bufPtr? Ein String?
|
AW: Der linken Seite kann nichts zugewiesen werden
Delphi-Quellcode:
oder
Byte(bufPtr[ix]) :=Byte( StrToIntDef('$' + Copy(hexDump,1 + ix*2,2) ,0));
Delphi-Quellcode:
Versuch es mal so (ich geh mal davon aus, daß bufPtr trotz des Namens einn Array oder ähnliches ist)
Byte(bufPtr[ix]) :=Byte( StrToIntDef('$' + Copy(hexDump,1 + ix*2,2) ,0) and $FF);
Gruß K-H |
AW: Der linken Seite kann nichts zugewiesen werden
Du darfst/solltest auf der linken Seite keinen Cast einsetzen.
Ich gehe mal davon aus, dass bufPtr den Datentyp
Delphi-Quellcode:
oder
PByte
Delphi-Quellcode:
hat:
array of Byte
Delphi-Quellcode:
bufPtr[ix] := Byte(StrToIntDef('$' + Copy(hexDump,1 + ix*2,2) ,0));
// evtl. auch so (bufPtr +ix)^ := Byte(StrToIntDef('$' + Copy(hexDump,1 + ix*2,2) ,0)) |
AW: Der linken Seite kann nichts zugewiesen werden
Kann es sein, dass Byte(bufPtr[ix]) dazumals als Konstante definiert wurde?
Ich hatte einmal einen ähnlichen Fall, wo ich ein Projekt auf D2009 hochgezogen hatte und da kamen gleiche Fehlermeldungen. Von welcher Version das kam, weiß ich leider nicht mehr. Offensichtlich war es unter alten Delphi/Pascal Ständen noch erlaubt, eine Konstante zu ändern. |
AW: Der linken Seite kann nichts zugewiesen werden
Und ich dachte bisher immer, schreibbare Konstanten wären ein Feature neuerer Delphiversionen ;-)
Ich habs grad nicht vor mir aber aus dem Kopf meine ich, BufPtr ist ein Array of AnsiChar und als Variable deklariert. Genaueres kann ich erst morgen sagen. |
AW: Der linken Seite kann nichts zugewiesen werden
Zitat:
Ist diese True, dann müsste das klappen. |
AW: Der linken Seite kann nichts zugewiesen werden
Ok, Problem gelöst. Hier der Originalcode:
Delphi-Quellcode:
Die Deklaration von bufPtr habe ich in PAnsiChar geändert und schon rockts.
var
ix : Integer; bufPtr : PChar; hexDump : AnsiString; begin hexDump := ReadAnsiString(aSection,aKey,''); Result := Length(hexDump) DIV 2; if Result > BufSize then Result := BufSize; bufPtr := Pointer(Buffer); for ix := 0 to Result -1 do begin Byte(bufPtr[ix]) := StrToIntDef('$' + Copy(hexDump,1 + ix*2,2) ,0); end; end; |
AW: Der linken Seite kann nichts zugewiesen werden
Mal zu deiner ursprünglichen Frage. Ausgehend davon, dass bufPtr ein Array of (Ansi)Char ist, würde folgendes Funktionieren:
Delphi-Quellcode:
Sprich: Immer die rechte Seite in den Typ der linken Seite casten und nicht umgekehrt.
bufPtr[ix] := Char(StrToIntDef('$' + Copy(hexDump,1 + ix*2,2) ,0));
Alternativ sollte auch das funktionieren (ist aber unschön):
Delphi-Quellcode:
Dein Problem war aber vermutlich grade eher, dass du nicht berücksichtigt hattest, dass XE4 im Gegensatz zu D7 jetzt Unicode (2Byte) Chars verwendet.
PByte(@bufPtr[ix])^ := StrToIntDef('$' + Copy(hexDump,1 + ix*2,2) ,0);
|
AW: Der linken Seite kann nichts zugewiesen werden
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 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