AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Zugriff auf andere Konstante als im Source Code angegeben
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriff auf andere Konstante als im Source Code angegeben

Ein Thema von Amateurprofi · begonnen am 26. Sep 2016 · letzter Beitrag vom 27. Sep 2016
Antwort Antwort
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

AW: Zugriff auf andere Konstante als im Source Code angegeben

  Alt 26. Sep 2016, 18:43
Heiko Genauso mach ich es auch immer. Umbenennen, Projekt neu erzeugen, und dann den Compiler meckern lassen, dann sieht man schon... Übrigens, schönen Gruss an die User der IDE's die sowas nicht unterstützen. Delphi hat manchmal schon seine Vorteile. Aber das nur am Rande.

Als Ursache "vermute" ich irgend ein Cache-Gedöns der IDE. Besonders auffällig war dieses ungewöhnliche Verhalten bei mir immer, wenn die entsprechende Unit nicht explizit in die .DPR eingebunden war, sondern über einen Suchpfad automatisch gefunden wird. Seitdem ich bei eigenen Units generell keine Suchpfade mehr verwende und die Units direkt einbinde, scheint das Problem behoben zu sein.
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Zugriff auf andere Konstante als im Source Code angegeben

  Alt 26. Sep 2016, 18:50
IDE's die sowas nicht unterstützen.
Welche wären das?
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: Zugriff auf andere Konstante als im Source Code angegeben

  Alt 26. Sep 2016, 19:00
Das Problem hatte ich auch schon mal.

Grund war:

Es gab zu der Unit zwei DCUs, die an unterschiedlichen Stellen abgelegt waren.

Die falsche DCU lag leider im Suchpfad vor der richtigen DCU, so dass IDE und Compiler bei Änderungen irgendwie aneinander "vorbeigeredet" haben.

Irgendwann hab' ich dann für mich entschieden:

Alle DCUs aller Projekte werden an einer Stelle abgelegt. Es gibt nur einen Ausgabepfad für Units.
Wenn irgendein Projekte bei der Entwicklung "rumzickt", wird zuerst dieses Verzeichnis geleert und dann das aktuelle Projekt neu erstellt.

Seit dem hab' ich solche Probleme nicht mehr gehabt und auch keine Meldung dieser Art mehr gesehen: [DCC Fehler] Project1.dpr(5): F2051 Unit IrgendEinName wurde mit einer unterschiedlichen Version von IrgendEinAndererName compiliert

Klar: Wenn man bei der Entwicklung (warum auch immer) unterschiedliche Versionen von Programmteilen ... vorhalten muss, ist das keine so besonders sinnvolle Vorgehensweise,
aber für die Hobbyprogrammierung reicht das aus
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.087 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Zugriff auf andere Konstante als im Source Code angegeben

  Alt 27. Sep 2016, 00:59
Vielen Dank für Eure Antworten.

@Bjoerk:
Das hatte ich gemacht.
"PianoKeyName" kam als Deklaration im gesamten Projekt nur 1 mal vor.
Alle anderen Fundstellen waren Zugriffe auf diese Konstante.

@hoika:
Auch dass hatte ich versucht; ohne Erfolg.

@mm1256:
"irgend ein Cache-Gedöns der IDE" war auch eine meiner Vermutung.
Wie in #1 erwähnt, hatte ich die Konstante auch in die Unit verschoben, in der ich darauf zugreifen wollte, was mit einer Exception endete.
Das sah für mich so aus als wäre beim Kompilieren die ursprüngliche Position der Konstanten verarbeitet worden, und zur Laufzeit krachte es dann.
Aber auch nach zwischenzeitlichem Arbeiten mit anderen Projekten und selbst nach runterfahren des Rechners blieb das Problem.

@nahpets:
Es gibt/gab genau 3 der Base.dcu.
Eine in …/win32/Debug im aktuellen Projekt.
Zwei in einem anderen Verzeichnis, in …/win32/Debug und …/win64/Debug.
Dieses andere Verzeichnis ist nicht im Suchpfad und zudem war die Konstante in diesen beiden noch nicht vorhanden.
Hintergrund ist, dass ich, wenn ich größere Änderungen vorhabe, vorher eine Kopie des Projektverzeichnis anlege, damit ich im Zweifelsfall bequem wieder zum alten Stand der Dinge zurückkommen kann.

Mir scheint, dass die Art, wie ich Teile der Deklaration entfernt hatte (Spaltenweises Löschen) die DIE durcheinander brachte.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.869 Beiträge
 
Delphi 12 Athens
 
#5

AW: Zugriff auf andere Konstante als im Source Code angegeben

  Alt 27. Sep 2016, 07:59
Hintergrund ist, dass ich, wenn ich größere Änderungen vorhabe, vorher eine Kopie des Projektverzeichnis anlege, damit ich im Zweifelsfall bequem wieder zum alten Stand der Dinge zurückkommen kann.
Du beschreibst gerade genau die Funktionsweise einer Versionsverwaltung wie Git, SVN usw.
Da kannst du dir den ganzen Aufwand sparen und hast noch dazu deine Änderungen hinterher sauber geloggt um später noch nachvollziehen zu können was du warum geändert hast.

Alle DCUs aller Projekte werden an einer Stelle abgelegt. Es gibt nur einen Ausgabepfad für Units.
Das Gegenteil wäre in der Regel sinnvoller. Ein DCU Verzeichnis pro Projekt, Konfiguration und Plattform (mit Platzhaltern im Pfad), damit IFDEFs funktionieren. Denn wenn sich nur eine Compilerdirektive ändert, die Unit aber nicht, wird diese nicht neu erzeugt. Das gibt dann auf den ersten Blick echt seltsame Fehler.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Zugriff auf andere Konstante als im Source Code angegeben

  Alt 27. Sep 2016, 09:59
Denn wenn sich nur eine Compilerdirektive ändert, die Unit aber nicht, wird diese nicht neu erzeugt.
Wenn man "Erzeugen" (Build) sagt, dann wird immer alles "neu erzeugt" aber beim "Kompilieren" (Cimpile) werden Units, die ale "unverändert" erkannt wurden und wozu eine DCU existiert, nicht neu "erzeugt"
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
mm1256

Registriert seit: 10. Feb 2014
Ort: Wackersdorf, Bayern
642 Beiträge
 
Delphi 10.1 Berlin Professional
 
#7

AW: Zugriff auf andere Konstante als im Source Code angegeben

  Alt 27. Sep 2016, 10:02
....Denn wenn sich nur eine Compilerdirektive ändert, die Unit aber nicht, wird diese nicht neu erzeugt. Das gibt dann auf den ersten Blick echt seltsame Fehler.
Dieses Problem umgehe ich, indem ich für jedes größere Projekt eine .INC mit den entsprechenden Compilerdirektiven erzeuge, und die .INC dann in jede Unit einfüge. Das macht neben der Lösung dieses Problems ganz besonders viel Sinn, wenn man eindeutig zwischen DEBUG und RELEASE unterscheiden möchte/muss.
Gruss Otto PS: Sorry wenn ich manchmal banale Fragen stelle. Ich bin Hobby-Programmierer und nicht zu faul die SuFu zu benutzen
  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 14:29 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 by Thomas Breitkreuz