AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi [DCC Error] E2064 Left side cannot be assigned to
Thema durchsuchen
Ansicht
Themen-Optionen

[DCC Error] E2064 Left side cannot be assigned to

Ein Thema von RWarnecke · begonnen am 4. Okt 2011 · letzter Beitrag vom 4. Okt 2011
Antwort Antwort
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#1

[DCC Error] E2064 Left side cannot be assigned to

  Alt 4. Okt 2011, 17:18
Hallo zusammen,

ich stehe irgendwie auf dem Schlau. Die folgende Zeile funktioniert unter XE2 32Bit hervorragend und unter 64Bit gibt es die Meldung wie im Titel.

Delphi-Quellcode:
var
  FFileHandle : Cardinal;
  TmpSerial : array[1..20] of AnsiChar;
  i, j : integer;
  buffer : array [0..sizeof (SRB_IO_CONTROL) + sizeof (SENDCMDOUTPARAMS)] of AnsiChar;
  p : SRB_IO_CONTROL absolute buffer;
  pin : PSENDCMDINPARAMS;
  dummy : dword;
  pOut : PSENDCMDOUTPARAMS;
  pId : PIDSECTOR;
begin
  result := '';
  FFileHandle := CreateFileA(PAnsiChar('\\.\Scsi' + AnsiString(inttostr(devname)) + ':'),
                             GENERIC_READ or GENERIC_WRITE,
                             FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
                             OPEN_EXISTING, 0, 0);
  try
    if FFileHandle <> INVALID_HANDLE_VALUE then
    begin
      try
        dword(pin) := dword(@buffer) + sizeof(SRB_IO_CONTROL); //<--- Fehler aus dem Titel
        fillchar(buffer, sizeof (buffer), 0);
        p.HeaderLength := sizeof (SRB_IO_CONTROL);
        p.Timeout := 1000;
Da muss also irgendwo der Wurm drin sein. Mein Vermutung liegt bei den beiden dword-Befehlen, bin mir aber nicht sicher. Könnt Ihr mir anhand der paar Zeilen sagen, warum diese Zeile unter 64Bit nicht funktioniert ?
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#2

AW: [DCC Error] E2064 Left side cannot be assigned to

  Alt 4. Okt 2011, 17:30
PSENDCMDINPARAMS ist ein Pointer und der ist unter 64-Bit halt 64-Bit lang. Damit funktioniert der Cast auf DWord nicht.

Edit: Nimm besser NativeInt.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.009 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: [DCC Error] E2064 Left side cannot be assigned to

  Alt 4. Okt 2011, 17:50
Edit: Nimm besser NativeInt.
Oder besser IntPtr - ist zwar nur ein Alias für NativeInt, macht aber direkt sichtbar, dass du hier nen Pointer in nem Zahlenwert rumträgst.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#4

AW: [DCC Error] E2064 Left side cannot be assigned to

  Alt 4. Okt 2011, 18:08
Hallo Ihr beiden,

danke für eure schnellen Antworten. Mit NativeInt oder IntPtr kompiliert er jetzt ohne Fehler durch. Wäre doch vergleichbar mit diesem Beispiel hier, nur ein anderer Typ ?
Delphi-Quellcode:
      {$IFDEF Win32}
        Inc(Integer(lgi01), SizeOf(Pointer));
      {$ELSE}
        Inc(Int64(lgi01), SizeOf(Pointer));
      {$ENDIF}
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

AW: [DCC Error] E2064 Left side cannot be assigned to

  Alt 4. Okt 2011, 18:26
Wie wäre es mit PByte bzw. um abwärtskompatibel zu bleiben PAnsiChar:

Inc(PByte(lgi01), SizeOf(Pointer));

Ich würde das übrigens so schreiben:
pin := PSENDCMDINPARAMS(PByte(@buffer) + SizeOf(SRB_IO_CONTROL));
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#6

AW: [DCC Error] E2064 Left side cannot be assigned to

  Alt 4. Okt 2011, 18:30
Ich würde das übrigens so schreiben:
pin := PSENDCMDINPARAMS(PByte(@buffer) + SizeOf(SRB_IO_CONTROL));
Du verwirrst mich hier ein wenig. Was macht Deine Zeile anderst als meine ??? Da komme ich jetzt nicht ganz mit vom Verständnis her.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.481 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

AW: [DCC Error] E2064 Left side cannot be assigned to

  Alt 4. Okt 2011, 18:38
Was macht Deine Zeile anderst als meine ???
Ich habe den Typecast am R-Value und nicht am L-Value. Ist aber Geschmackssache. Zudem nutze ich PByte statt DWORD bzw. IntPtr.
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#8

AW: [DCC Error] E2064 Left side cannot be assigned to

  Alt 4. Okt 2011, 18:49
Hallo Andreas, jetzt komme ich dahinter. Danke für Deine Erklärung.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.163 Beiträge
 
Delphi 12 Athens
 
#9

AW: [DCC Error] E2064 Left side cannot be assigned to

  Alt 4. Okt 2011, 19:37
Was auch immer geht (egal welche Delphiversion) ... PAnsiChar

Für diesen wurde eine schöne Arithmetik eingebaut (1 Byte pro addiertem Wert)


PS: Wenn du del linken Cast nix zuweisen kannst, dann verschiebe den Cast nach rechts


Delphi-Quellcode:
pin := Pointer(PAnsiChar(@buffer) + SizeOf(SRB_IO_CONTROL)); // Pointer kann an alle Pointertypen zugewiesen werden

// oder

pin := PSENDCMDINPARAMS(PAnsiChar(@buffer) + SizeOf(SRB_IO_CONTROL));


// und wäre PIN selbst ein "Pointer", dann könnte man ihm den PAnsiChar direkt zuweisen, ohne zusätzlichen Cast
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


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:53 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