AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

wieder mal die Zeiger

Ein Thema von kiar · begonnen am 26. Jan 2005 · letzter Beitrag vom 26. Jan 2005
Antwort Antwort
Seite 2 von 2     12   
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#11

Re: wieder mal die Zeiger

  Alt 26. Jan 2005, 12:54
Zitat von kiar:
hallo,

mit diesem Quelltext:
Delphi-Quellcode:
procedure LoadSettings;
var
  Ini: TIniFile;
  xP : PSettings;
begin
    new(xP);
    Ini:= TIniFile.Create(ExtractFilePath(Paramstr(0)) + 'maxes.ini');
    with Ini, xP^ do
      Begin
             FZa1:= ReadString('Zahlen', 'Zahl1', '10');
             FZa2:= ReadString('Zahlen', 'Zahl2', '10');
             iFk := ReadInteger('Funktionen', 'Funktion', 0);
      end;
   ini.free;
end;
trten erstmal kein Zugriffsverletzungen auf, leider ist der Zugriff auf die procedure von einen anderen form immer noch nicht definiert
Das ist doch ziemlich klar. 8) xP ist nur lokal definiert und deshalb ist es außerhalb der Prozedur eben nicht definiert --> nur Hyroglyphen.

@Kiar : Man darf natürlich das xP, wenn es schon mit new nur lokal erzeugt wird auch nicht als Wert-Parameter sondern als Var-Parameter übergeben. Da hat einer sich nicht so richtig an das Prinzip der Datenkapselung gehalten.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

Registriert seit: 6. Aug 2002
Ort: Wien
598 Beiträge
 
Delphi XE2 Professional
 
#12

Re: wieder mal die Zeiger

  Alt 26. Jan 2005, 13:01
Hmpf.. warum wird mein Beitrag wiedermal komplett ignoriert?
Ich hab doch hier bereits geschrieben woran das liegt und was man dagegen tut!
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#13

Re: wieder mal die Zeiger

  Alt 26. Jan 2005, 13:04
Zitat von Motzi:
Hmpf.. warum wird mein Beitrag wiedermal komplett ignoriert?
Ich hab doch hier bereits geschrieben woran das liegt und was man dagegen tut!
Ka ich würd für sowas trotzdem lieber ein Object nehmen..

Bye
Christian
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#14

Re: wieder mal die Zeiger

  Alt 26. Jan 2005, 13:06
Aber er hat doch new verwendet. Das ist nicht der Fehler. Leider eben nur für eine lokale Variable. Woher soll denn eine andere Form wissen, was in dem lokalen Xp drinsteht ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#15

Re: wieder mal die Zeiger

  Alt 26. Jan 2005, 17:22
hallo,

@Kedariodakon - nette Variante werde ich mir mal näher anschauen, also mache dich auf Fragen gefasst

@Manuel - habe ich doch nicht, habe doch es mit new() gemacht

Das richtige, in meinem Fall ist der Tip von Hansa gewesen , aber halt, er hatte einen anderen Kenntnisstand

ich habe die aufrufende Procedure geändert, das konntet Ihr nicht wissen.
Delphi-Quellcode:
var
  xP: Psettings;
begin
   LoadSettings; // alte Variante
   Loadsettings(xP); // neue Variante
aufgrund der neueren Variante hatte Hansa den Vorschlag gemacht, die LoadSettings mir Var Parameter zu deklarieren. also so: Loadsettigs(var xP: Psettings); dies hat erstmal zum Erfolg geführt.

danke an alle Raik
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#16

Re: wieder mal die Zeiger

  Alt 26. Jan 2005, 19:59
Um es noch einmal ganz klar zu sagen: die Gültigkeitsbereiche sind schon wichtig. Und das hat mit Pointer usw. absolut nichts zu tun. Solche Fehler können im Prinzip überall auftreten. Wird eine Variable lokal, also so wie hier innerhalb einer Prozedur deklariert, dann gilt sie nur da. Wird die Prozedur aufgerufen, so bekommt das aufrufende Programm davon nichts mit. Das new innerhalb der Prozedur war also hier auch für die Katz.

Auch der jetzt verwendete VAR-Parameter ist nicht ganz ohne. Dann wird nämlich immer etwas an die aufrufende Stelle zurückgeliefert. Das geht hier ja jetzt anscheinend. Aber wehe, wenn innerhalb der Prozedur der VAR-Parameter keinen Wert zugewiesen bekommt. Dann ist der Effekkt der selbe und auch dann wird nur ein Zufallswert an das Programm zurückgeliefert. Deshalb sollten Var-Parameter immer zuerst initialisiert werden. Auch wenn man sich ganz sicher ist, daß sie auf jeden Fall irgendwo einen Wert erhalten.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 11:03 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