![]() |
Delphi-Version: 7
Parameterübergabe an Prozedur
Hallo,
habe eine Prozedur mit folgendem symbolischen INhalt:
Delphi-Quellcode:
Das Problem: WEnn ich am Prozeduraufruf DatenPruefen() den Inhalt und die Speicheradressen der Parameter anschaue, ist alles in Ordnung. WEnn ich mit F7 einen Schritt weiter gehe, sind die Parameter nach dem Daten Datum SChrott und die Speicheradressen sind anders (also innerhalb der Prozedur). procedure DatenPruefen(const ID: Integer; VAR Bezeichnung: String; VAR Datum:TDateTime; VAR ID2: Integer; VAR ID3: Integer; Var Vektor: Array of Integer); begin ... end; procedure DatenEintragen(ID: Integer; Bezeichnung: String; ID2: Integer, Datum: TDateTime); begin .. .. DatenPruefen(ID, Bezeichnung, Datum, ID2, ID3, Vektor); .. .. end; Was ich herausgefunden habe: Die Speicheradresse von ID2 hat sich geändert. DIese zeigt beim EIntritt in die Prozedur auf die Speicheradresse des Datums +16 (vorher Speicheradresse Datum +76). Die Speicheradresse von ID3 zeigt nun auf die Adresse von ID2 und damit auch auf deren Inhalt, die restlichen Adressen zeigen auch auf andere Bereiche. Was ich geprüft habe: 1. die Prozedur DatenPruefen ist nur intern in der Unit aufrufbar, es gibt im Projekt / Sourcenverzeichnis keine weitere solche Methode. 2. Es gibt keine doppelten (globalen) Variablen. 3. die Reihenfolge der Parameter sind korrekt 4. dcus sind gelöscht, d.h. neu kompiliert, keine doppelten Units im Bereich der Suche 5. die VAR und CONST in der Methodendeklaration entfernt 6. Position der Parameter verändert An den letzten beiden Punkten sieht man, dass mir an der Stelle eine Idee fehlt, wie ich da weiter kommen kann. Hat jemand eine Idee was ich machen kann? Kann leider kein Demosource zur Verfügung stellen, das geht nur in dem Projekt so (Delphi 7) und lässt sich aber auf anderen EntwicklerPCs nachvollziehen. Grüße |
AW: Parameterübergabe an Prozedur
Moin Lemmy,
ich habe, offen gestanden, nie darauf geachtet, ob sich die Adressen von Variablen ändern, aber: Stimmen denn die Inhalte noch? Wenn nicht, wäre der Inhalt der Prozedur interessant. Was ich nicht verstehe ist folgender Satz: Zitat:
|
AW: Parameterübergabe an Prozedur
Hi,
nein, die Inhalte stimmen auch nicht mehr, deshalb habe ich auch erst nach den SPeicheradressen geschaut. Das Datum ist noch korrekt, der INhalt von ID2 ist eine bel. Integerzahl, der Inhalt von ID3 ist der ehem. Inhalt von ID2 (weil wie gesagt der Zeiger auf den Bereich von ID2 zeigt). Korrektur: Zitat:
Zitat:
|
AW: Parameterübergabe an Prozedur
Zitat:
Aber warum sind die Parameter einer Prüffunktion VAR-Parameter? Ich denke die prüft nud den Inhalt ... von Ändern wird da nichts gesagt. |
AW: Parameterübergabe an Prozedur
Hi,
die Geschichte mit den Var-Parametern hängt daran, dass bei der Prüfung diese ggf. doch geändert werden können. Hängt an der Stelle mit der Fachlogik zusammen und ist nicht so schnell erklärt. Dass hier die Benennung und im Grunde der gesamte Ablauf nicht optimal ist, ist mir klar, aber ich bin leider nicht in der Position das komplett zu überarbeiten. [edit: Nachtrag]zudem wie oben geschrieben: wenn ich die Vars und Consts aus der Deklaration entferne ändert sich nix am Problem...[/edit] Aber sag doch noch ein paar Worte zu dem Array: Warum ist das Array so nicht möglich (Zuweisungsproblematik ist mir bekannt)? Was für Fehler könnten da auftreten die zu so einem Verhalten führen? Zudem, das Array kommt doch erst nach den problematischen Daten? Um das auszuschließen könnte ich aber sicherlich das Array mal kurz deaktivieren und schauen ob das Problem dann immer noch auftritt... GRüße [edit] so gemacht, Array raus geworfen, ändert nix an der Verschiebung der Speicheradressen.. |
AW: Parameterübergabe an Prozedur
Hmm, ich hab derartige Probleme eigentlich auch noch nie bemerkt.
Eventuell bist ja doch auf einen Compiler-Bug gestoßen. Wir können hier aber auch nicht viel helfen, da das Problem hier nicht auftritt. Tja, was passiert, wenn du allen Code innerhalb der Prüfprozedur auskommentierst? Ansonsten kannste nur - debuggen und rausfinden wann/wo es sich verändert - aus dem Projekt alles entfernen, bis möglichst nur noch der Fehler übrig bleibt und uns den dann zeigen |
AW: Parameterübergabe an Prozedur
Hi,
Du bist ab sofort und offiziell mein Held! das Deaktivieren der Sourcen hat mich auf die Zielgerade gebracht. Neben div. Inlineprozeduren hat der Entwickler auch ein tolles Label definiert gehabt. Wenn ich das deaktiviere, dann passt das. Habe die entsprechenden Sourcne in eine weitere Inlinemethode gepackt und funktioniert immer noch... Und da behaupten immer noch welche "goto" sein nicht böse..... Grüße und dir vielen Dank für die SChützenhilfe.... |
AW: Parameterübergabe an Prozedur
Delphi-Quellcode:
procedure DatenPruefen(const ID: Integer; VAR Bezeichnung: String; VAR Datum:TDateTime; VAR ID2: Integer; VAR ID3: Integer; Var Vektor: Array of Integer);
Sooo viele VAR-Parameter? Wäre es vielleicht nicht sinnvoll die Parameter zu einem Record zusammenzufassen? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 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