AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Funktionsaufruf innerhalb With..do => access violation
Thema durchsuchen
Ansicht
Themen-Optionen

Funktionsaufruf innerhalb With..do => access violation

Ein Thema von Hobbycoder · begonnen am 6. Mär 2017 · letzter Beitrag vom 6. Mär 2017
Antwort Antwort
nahpets
(Gast)

n/a Beiträge
 
#1

AW: Funktionsaufruf innerhalb With..do => access violation

  Alt 6. Mär 2017, 11:39
Ohne den vollständigen Quelltext und die vollständige Formulardefinition wird das konkrete Erkennen der Fehlerursache schwierig. Mal ein einfaches Beispiel, um auf eine mögliche Fehlerursache hinzuweisen:

Gegeben sei ein Formular (Form1) mit 'nem Label (Label1) drauf:
Delphi-Quellcode:
with Form1 do begin
  Caption := Label1.Caption;
end;

with Form1 do begin
  with Label1 do begin
    Caption := Caption;
  end;
end;

with Form1, Label1 do begin
  Caption := Caption;
end;
Diese Beispiele sind extrem verkürzt, machen aber hoffentlich klar, dass auch bei korrekter Syntax und Kompilierbarkeit von Quelltext bei der Verwendung von With "Namenskonflikte" auftreten können.

D. H.: Es kann sein, dass bei mehreren gleichnamigen Eigenschaften unterschiedlicher Objekte zwar eine syntaktisch korrekte Interpretation möglich ist, aber nicht zwingend vom Compiler die konkret gemeinte Eigenschaft genutzt wird, sondern die von ihm "vermutete" Eigenschaft. Die kann aber zur Laufzeit zu einem Objekt gehören, dass (noch) nicht erstellt wurde und dies führt zu dem von Dir beschriebenen Fehler.

Sprich: Es wird auf was anderes zugegriffen, als Du beim Schreiben und Lesen des Quelltextes meinst.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
1.002 Beiträge
 
#2

AW: Funktionsaufruf innerhalb With..do => access violation

  Alt 6. Mär 2017, 12:45
Alles klar

ich habs dann noch mal so probiert:
Delphi-Quellcode:
       faxnummer:=ValidateNumber(faxnummer, self.CountryList, self.ONKZList, self.Settings.OwnCountryPrefix, Self.Settings.OwnCityPrefix, LKZ, ONKZ, RN, idxLKZ, idxONKZ); // <-- Hier kommt die Access Violation
       edt_faxnummer.Text:=faxnummer;
       if idxLKZ>-1 then lbl_LKZ.Caption:=Self.CountryList[idxLKZ].CountryDE;
       if idxONKZ>-1 then lbl_ONKZ.Caption:=Self.ONKZList[idxONKZ].Ort;
Und nun eindeutigen Referenz mittels self greift er nun auf die richtigen Variablen zu.

Hätte mir klar sein müssen/sollen.
Fazit: with..do lohnt wirklich nur bei extrem kurzen Abschnitten, in denen keine Mehrdeutigkeiten auftreten können.

Danke an euch alle.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.437 Beiträge
 
Delphi 12 Athens
 
#3

AW: Funktionsaufruf innerhalb With..do => access violation

  Alt 6. Mär 2017, 12:57
Zitat:
Fazit: with..do lohnt wirklich nur bei extrem kurzen Abschnitten
...wie du siehst überhaupt nicht. Dann ergänze mal deinen Code z.B... Plötzlich kommt was anderes raus als früher. Es muß nicht immer eine AV sein.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Funktionsaufruf innerhalb With..do => access violation

  Alt 6. Mär 2017, 14:04
Diese Beispiele sind extrem verkürzt, machen aber hoffentlich klar, dass auch bei korrekter Syntax und Kompilierbarkeit von Quelltext bei der Verwendung von With "Namenskonflikte" auftreten können.

D. H.: Es kann sein, dass bei mehreren gleichnamigen Eigenschaften unterschiedlicher Objekte .......
Delphi-Quellcode:
//var R: TRect;
with R do begin
  Width := Right - Left;
end;
Früher traf es Form.Width bzw. Self.Width und nun Delphi-Referenz durchsuchenTRect.Width
Ein Therapeut entspricht 1024 Gigapeut.
  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 22:44 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