![]() |
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:
|
AW: Der linken Seite kann nichts zugewiesen werden
Das man den Wert typisierter Konstanten ändern kann, ist meines Wissens nach auch bei Delphi 2007 noch Standard.
|
AW: Der linken Seite kann nichts zugewiesen werden
Zitat:
|
AW: Der linken Seite kann nichts zugewiesen werden
Um genau zu sein nicht typisierte Konstanten, sondern deren Veränderung empfinde ich als unsauber.
Wenn const dransteht, erwartet man nun einmal auch einen konstanten Wert. Wenn der dann plötzlich irgendwo geändert wird, kann man bei fremden Quelltexten ewig suchen bis man das erstens sieht und zweitens findet wo das passiert. Wenn man eine Variable will, denn nichts anderes ist eine "Konstante" (haha), die man ändern kann, dann sollte man auch eine nehmen und damit kundtun, dass der Wert eben nicht konstant ist. Zitat:
|
AW: Der linken Seite kann nichts zugewiesen werden
Ich programmiere zwar nicht mehr mit Delphi. Zu viel Lernaufwand, wenn man das zuhause im stillen Kämmerlein machen muss. Habe aber gestern mit gelesen, den Strang "Delphi und Freepascal neu lernen".
Da ging es auch um Schutz des Quellcodes vor fremden Augen. Wären da solch typisierte Konstanten nicht was? Wenn Jaenicke schreibt, das er da wegen Veränderunf solcher Konstanten ewig im Quelltext sucht, könnte dies doch auch einem unbefugten das Leben schwer machen, den Programmcode zu knacken? Oder? hier die Ausführung dazu von jaenicke: Zitat:
Nur mal so gefragt. Ich habe durchaus auch die Auffassung von Microsoft im og. Thread gestern gelesen, das nämlich ein Schutz mit Obfuscator bei .NET Code ziemlich wertlos ist, weil der Code ohne großen Aufwand wieder entschlüsselt werden kann. Wie aber sähe die Sache bei zum Beispiel Verwendung typisierter Konstanten im von jaenicke angeprangerten Sinne aus? Zitat:
|
AW: Der linken Seite kann nichts zugewiesen werden
Zitat:
Im kompilierten Code ist so etwas jedenfalls kein Schutz. Es ist ja im generierten Code wie eine Variable. Zitat:
Wer Assembler kann, für den ist es auch nicht schwerer disassemblierten Delphicode zu lesen, eher einfacher, weil da nichts verfälscht ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:57 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