AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

& Operator???

Ein Thema von tspax · begonnen am 28. Feb 2017 · letzter Beitrag vom 28. Feb 2017
Antwort Antwort
tspax

Registriert seit: 23. Feb 2017
1 Beiträge
 
#1

& Operator???

  Alt 28. Feb 2017, 08:38
Delphi-Version: 10 Seattle
Servus,

ich bin gerade auf nen komischen Fehler gestoßen in Verbindung mit TStream und Delphi XE10.

Fehler:
Code:
EurekaLog 7.4.0.0 

Exception:
------------------------------------
  2.5 Type  : EWriteError
  2.6 Message: Stream-Schreibfehler.
  2.7 ID    : DD310000
  2.11 Sent : 0
Vorher (Falsch)
Code:
var
  lBuffer : LongWord;
begin
  lBuffer := 0;
  fsWritingStream.WriteBuffer(pointer(&lBuffer), 4);
end;
Korrigiert (Korrekt)
Code:
var
  lBuffer : LongWord;
begin
  lBuffer := 0;
  fsWritingStream.WriteBuffer(pointer(@lBuffer), 4);
end;
In Delphi 2007 hatte das mit dem &-Operator schon seit Jahren funktioniert -> Portiere gerade eine aufwendige Anwendung von D2007 nach XE10.

Was zur Hölle macht denn dieser Operator?? In C ist das der Referenz-Operator aber in Delphi???
Kann es sein, das der in D2007 schlichtweg nen @ draus macht???

Geändert von tspax (28. Feb 2017 um 08:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
7.772 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: & Operator???

  Alt 28. Feb 2017, 09:29
Das macht hier gar nichts. Damit maskierst du ein reserviertes Wort um z.B. type als Eigenschaft einer Klasse nutzen zu können.

Mit dem cast auf Pointer benutzt du den Zahlenwert, der in der Variablen steht, als Speicheradresse. Je nachdem was für ein Wert das ist, gibt es dann beim Zugriff auf diesen Bereich einen Fehler. Funktioniert haben kann das vorher nicht. Jedenfalls nicht so wie du es meinst.

Das es vorher keinen Fehler gab, war einfach Zufall, weil der entsprechende Speicherbereich lesbar war.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
MichaelT

Registriert seit: 14. Sep 2005
Ort: 4020 Linz
519 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: & Operator???

  Alt 28. Feb 2017, 10:14
Code:
procedure WriteBuffer(const Buffer; Count: Longint); overload;
procedure WriteBuffer(const Buffer: TBytes; Count: Longint); overload;
Das '&' wird ignoriert, aber WriteBuffer ist überladen. Damit springt der das Programm in eine andere Implementierung. Mit einem MemoryStream habe ich es grad probiert und beide respektive alle 3 Varianten funktionieren. Ist im Seattle nicht anders.

Aber mit Pointer(var) geht gar nichts.

Das macht hier gar nichts. Damit maskierst du ein reserviertes Wort um z.B. type als Eigenschaft einer Klasse nutzen zu können.

Mit dem cast auf Pointer benutzt du den Zahlenwert, der in der Variablen steht, als Speicheradresse. Je nachdem was für ein Wert das ist, gibt es dann beim Zugriff auf diesen Bereich einen Fehler. Funktioniert haben kann das vorher nicht. Jedenfalls nicht so wie du es meinst.

Das es vorher keinen Fehler gab, war einfach Zufall, weil der entsprechende Speicherbereich lesbar war.

Geändert von MichaelT (28. Feb 2017 um 11:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
7.772 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: & Operator???

  Alt 28. Feb 2017, 11:30
Hmm, stimmt. Nur weil es auf Pointer geachtet wird, wird es ja dennoch nicht als Pointer verwendet, wenn es dafür keine Überladung gibt, sondern der nicht typisierte Buffer benutzt...

Das war wohl ein Fehler im Braincompiler.

Dann ist der Streamschreibfehler auch wirklich ein solcher. Es konnte nix geschrieben werden.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:20 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf