AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Der linken Seite kann nichts zugewiesen werden
Thema durchsuchen
Ansicht
Themen-Optionen

Der linken Seite kann nichts zugewiesen werden

Ein Thema von Codehunter · begonnen am 26. Aug 2013 · letzter Beitrag vom 28. Aug 2013
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#1

Der linken Seite kann nichts zugewiesen werden

  Alt 26. Aug 2013, 16:24
Delphi-Version: 5
Hallo!

Ich migriere grad ein Projekt von D7 nach XE4 und bei folgender Zeile bekomme ich die besagte Fehlermeldung:

Byte(bufPtr[ix]) := StrToIntDef('$' + Copy(hexDump,1 + ix*2,2) ,0); Der Code compiliert im D7 problemlos aber eben nicht in XE4

Danke für eure Hilfe!
Cody
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Der linken Seite kann nichts zugewiesen werden

  Alt 26. Aug 2013, 16:28
Was für einen Typ hat bufPtr? Ein String?
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Der linken Seite kann nichts zugewiesen werden

  Alt 26. Aug 2013, 17:08
Byte(bufPtr[ix]) :=Byte( StrToIntDef('$' + Copy(hexDump,1 + ix*2,2) ,0)); oder
Byte(bufPtr[ix]) :=Byte( StrToIntDef('$' + Copy(hexDump,1 + ix*2,2) ,0) and $FF); Versuch es mal so (ich geh mal davon aus, daß bufPtr trotz des Namens einn Array oder ähnliches ist)

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Der linken Seite kann nichts zugewiesen werden

  Alt 26. Aug 2013, 17:09
Du darfst/solltest auf der linken Seite keinen Cast einsetzen.
Ich gehe mal davon aus, dass bufPtr den Datentyp PByte oder array of Byte hat:
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))
fork me on Github
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.643 Beiträge
 
Delphi 12 Athens
 
#5

AW: Der linken Seite kann nichts zugewiesen werden

  Alt 26. Aug 2013, 18:34
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.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Der linken Seite kann nichts zugewiesen werden

  Alt 26. Aug 2013, 20:39
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.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Der linken Seite kann nichts zugewiesen werden

  Alt 27. Aug 2013, 08:42
Offensichtlich war es unter alten Delphi/Pascal Ständen noch erlaubt, eine Konstante zu ändern.
Dafür gibt es eine Compiler-Einstellung : zuweisbare typisierte Konstanten

Ist diese True, dann müsste das klappen.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Der linken Seite kann nichts zugewiesen werden

  Alt 27. Aug 2013, 08:46
Ok, Problem gelöst. Hier der Originalcode:
Delphi-Quellcode:
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;
Die Deklaration von bufPtr habe ich in PAnsiChar geändert und schon rockts.
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#9

AW: Der linken Seite kann nichts zugewiesen werden

  Alt 27. Aug 2013, 17:32
Mal zu deiner ursprünglichen Frage. Ausgehend davon, dass bufPtr ein Array of (Ansi)Char ist, würde folgendes Funktionieren:
bufPtr[ix] := Char(StrToIntDef('$' + Copy(hexDump,1 + ix*2,2) ,0)); Sprich: Immer die rechte Seite in den Typ der linken Seite casten und nicht umgekehrt.

Alternativ sollte auch das funktionieren (ist aber unschön):
PByte(@bufPtr[ix])^ := StrToIntDef('$' + Copy(hexDump,1 + ix*2,2) ,0); Dein Problem war aber vermutlich grade eher, dass du nicht berücksichtigt hattest, dass XE4 im Gegensatz zu D7 jetzt Unicode (2Byte) Chars verwendet.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Der linken Seite kann nichts zugewiesen werden

  Alt 28. Aug 2013, 05:42
Und ich dachte bisher immer, schreibbare Konstanten wären ein Feature neuerer Delphiversionen
Um genau zu sein konnte man diese unsaubere Methode bei Delphi 1 nutzen. Ich glaube schon seit Delphi 2 ist die Standardeinstellung, dass Konstanten genau das sind: konstant...
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz