Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Zugriffsverletzung wegen WriteOnly published property (https://www.delphipraxis.net/167909-zugriffsverletzung-wegen-writeonly-published-property.html)

Sherlock 25. Apr 2012 07:27

Delphi-Version: 2007

Zugriffsverletzung wegen WriteOnly published property
 
Hi zusammen,
nach langer Suche, Blut, Schweiss und Tränen ist endlich ein Problem gelöst worden, daß für einige Verwirrung gesorgt hatte:
eine Kollegin hatte seit letzter Woche ein "Absturzgenerator-Projekt". Beim kompilieren oder beim anzeigen einer bestimmten Unit kam eine "Zugriffsverletzung in Adresse 000 lesen von 000"...und danach war Delphi bis zum Neustart nicht mehr zu gebrauchen, der Fehler persistierte.

Wir haben jetzt die Ursache gefunden, und hätten gerne eine schöne Erklärung dafür. Grund war das die Kollegin eine Komponente auf der Form besagter Unit hatte, die sie noch um eine published property erweiterte, die nur write-Zugriff hatte. Wir denken uns, daß es eventuell mit Zugriffen aufs DFM, oder mit dem Unvermögen des OI etwas auszulesen zu tun hat, daß es dann knallte, aber genau können wir es uns nicht zusammenreimen. Wer von Euch Illuminaten kann das komplett auflösen?

Sherlock

Uwe Raabe 25. Apr 2012 07:58

AW: Zugriffsverletzung wegen WriteOnly published property
 
Ohne das jetzt mangels Sourcen des Objektinspektors überprüfen zu können, wird der OI wohl Schwierigkeiten haben, Write-Only-Properties anzuzeigen (wie sollte er auch). Er scheint es zu versuchen, was aber (as designed) zu einem Fehler führt.

Einen Hinweis dazu findet man in den "Eigenschaften des Objektinspektors", wo man einstellen kann, ob er Nur-Lese-Eigenschaften anzeigen soll. Von Nur-Schreiben-Eigenschaften steht da nichts. Das lässt vermuten, daß dieser Fall nicht vorgesehen ist.

Ohne jetzt über den Sinn von Write-Only-Properties zu reden (ich würde hier eine Methode vorziehen), kann man nur empfehlen, derartige Komponenten nicht in der Design-Umgebung zu verwenden.

s.h.a.r.k 25. Apr 2012 08:03

AW: Zugriffsverletzung wegen WriteOnly published property
 
Ich denke mal dass es wahrlich am OI liegt, da dieser wohl jede published-Eigenschaft anzeigen wollen wird. Nur nachdem es nur einen Schreibzugriff gibt, wird es wohl zu einer Zugriffsverletzung kommen. Du könntest es ganz einfach testen und diese Nur-Schreiben-Property mal als public anstatt als published zu deklarieren. Ich würde behaupten, dass es dann zu keinerlei Problemen kommen sollte.

PS: Was für einen Sinn hat eine Write-Only-published-Eigenschaft? :gruebel: Alte Rtti?

Bernhard Geyer 25. Apr 2012 08:28

AW: Zugriffsverletzung wegen WriteOnly published property
 
Zitat:

Zitat von s.h.a.r.k (Beitrag 1163452)
PS: Was für einen Sinn hat eine Write-Only-published-Eigenschaft? :gruebel: Alte Rtti?

Denke ich auch. Was ist der Sinn davon? Du kannst es im OI nicht kontrollieren, du kannst es auch im Programm nicht wieder auslesen.
Hier wäre wohl ein stinknormale public-Methode sinnvoller.

silver-moon-2000 25. Apr 2012 10:21

AW: Zugriffsverletzung wegen WriteOnly published property
 

Zitat:

Zitat von s.h.a.r.k (Beitrag 1163452)
PS: Was für einen Sinn hat eine Write-Only-published-Eigenschaft? :gruebel: Alte Rtti?

http://docs.embarcadero.com/products...eonly_xml.html

Hier zum Beispiel geht es um ein Passwort, das man nicht auslesen können soll.


edit: Eigenschaft published überlesen

himitsu 25. Apr 2012 11:03

AW: Zugriffsverletzung wegen WriteOnly published property
 
Zitat:

Zitat von silver-moon-2000 (Beitrag 1163474)
Hier zum Beispiel geht es um ein Passwort, das man nicht auslesen können soll.[/s]

Ganz praktisch an der neuen RTTI ... man kommt nun auch an private Felder ran.

(gut, ich seh das eher als unschön, was meine eigenen Klassen betrifft, denn privat ist nun plötzlich doch irgendwie public, aber dafür kommt man bei fremden Komponenten/Klassen an Sachen ran, wo man sonst nicht rangekommen währe :roll: )

Bernhard Geyer 25. Apr 2012 11:04

AW: Zugriffsverletzung wegen WriteOnly published property
 
Zitat:

Zitat von himitsu (Beitrag 1163480)
Ganz praktisch an der neuen RTTI ... man kommt nun auch an private Felder ran.

(gut, ich seh das eher als unschön, was meine eigenen Klassen betrifft, denn privat ist nun plötzlich doch irgendwie public, aber dafür kommt man bei fremden Komponenten/Klassen an Sachen ran, wo man sonst nicht rangekommen währe :roll: )

Man kann doch die extended RTTI ganz gezielt für Klassen deaktivieren, oder?

himitsu 25. Apr 2012 11:28

AW: Zugriffsverletzung wegen WriteOnly published property
 
Wer macht das schon?

Oder anders gefragt: Wer hier kennt alle geheimen Compilerschalter, denn irgendwie fehlt da Vieles in der OH (oder es ist nicht auffindbar).

Uwe Raabe 25. Apr 2012 11:46

AW: Zugriffsverletzung wegen WriteOnly published property
 
Zitat:

Zitat von himitsu (Beitrag 1163484)
Oder anders gefragt: Wer hier kennt alle geheimen Compilerschalter, denn irgendwie fehlt da Vieles in der OH (oder es ist nicht auffindbar).

Aber nicht wirklich...

Liste der Delphi-Compiler-Direktiven - Index

RTTI-Direktive (Delphi)

Sherlock 25. Apr 2012 13:41

AW: Zugriffsverletzung wegen WriteOnly published property
 
Also grundsätzlich war es wohl ein Versehen bzw. Copy&Paste Fehler. :roll:

Danke für die Einblicke und Kommentare :dp:

Sherlock


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:02 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