AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Anderes Verhalten der Bedingungen in RAD2009?
Thema durchsuchen
Ansicht
Themen-Optionen

Anderes Verhalten der Bedingungen in RAD2009?

Ein Thema von messie · begonnen am 30. Jun 2009 · letzter Beitrag vom 30. Jun 2009
Antwort Antwort
Seite 1 von 2  1 2      
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#1

Anderes Verhalten der Bedingungen in RAD2009?

  Alt 30. Jun 2009, 15:33
Moin,

ich habe beim Umstellen eines Projektes von D6 auf RAD2009 ein merkwürdiges Verhalten.

In der einen Datei habe ich

Delphi-Quellcode:
{$IFDEF EINS}
wert_a := 0;
{$ELSE IFDEF ZWEI}
wert_a := LeseWert_a(inifile);
{$ENDIF}
in einer weiteren Datei steht dann
Delphi-Quellcode:
{$IFDEF ZWEI}
function LeseWert_a(inifile : WideString) : double;
{$ENDIF}
Im Projekt ist derzeit ZWEI definiert. Der Compiler geht in die Zuweisung von wert_a und meckert, dass er die Routine LeseWert_a() nicht kennt (Undeklarierter Bezeichner).

Die Behandlung der Bedingung in D6 und 2009 scheint dort unterschiedlich zu sein. Liegt das daran, dass man die Deklaration der Routine für externe Nutzung nicht mehr in einem solchen Block behandeln darf? Die Routine ist nicht Member eines Objects.

Grüße, Messie
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#2

Re: Anderes Verhalten der Bedingungen in RAD2009?

  Alt 30. Jun 2009, 16:03
Nein, das kann eigentlich nicht sein. Ich habe zich solcher IFDEF's in meinem Quelltext - das spielt. Allerdings kommt die "Strukturansicht" mit den IFDEF's nicht klar.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#3

Re: Anderes Verhalten der Bedingungen in RAD2009?

  Alt 30. Jun 2009, 16:08
Hi!

Kannst du mal ein kleines Testpackage zum ausprobieren anhängen, in dem das Problem auftritt.

Grüße, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#4

Re: Anderes Verhalten der Bedingungen in RAD2009?

  Alt 30. Jun 2009, 16:16
Versuch mal dies:

Delphi-Quellcode:
{$IFDEF EINS}
wert_a := 0;
{$ELSEIF Defined(ZWEI)}
wert_a := LeseWert_a(inifile);
{$IFEND}
Man beachte auch den veränderten Abschluss mit $IFEND!

Bei einem Konstrukt wie {$ELSE IFDEF xyz} wird das IFDEF eigentlich komplett ignoriert.
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

Re: Anderes Verhalten der Bedingungen in RAD2009?

  Alt 30. Jun 2009, 16:17
{$ELSE IFDEF ZWEI} das "IFDEF ZWEI" wird vom Compiler mehr wie ein Kommentar behandelt und nicht ausgewertet ...
man kann auch genausogut sowas machen:
Delphi-Quellcode:
{$IFDEF ZWEI}

{$ENDIF ZWEI}
wobei hier das bei ENDIF ebenfalls als Kommentar angesehn wird.

wenn der Compiler das $IF-Konstrukt unterstützt, dann ginge es so
Delphi-Quellcode:
{$IF Defined(EINS)}

{$ELSEIF Defined(ZWEI)}

{$IFEND}
ansonsten bleibt dir nur dieser Weg:
Delphi-Quellcode:
{$IFDEF EINS}

{$ELSE}
  {$IFDEF ZWEI}

  {$ENDIF}
{$ENDIF}
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Anderes Verhalten der Bedingungen in RAD2009?

  Alt 30. Jun 2009, 18:32
Das komische daran ist, dass der erste Teil mit dem $ELSE IFDEF im Ausgangspost hier in verschiedenen Varianten diskutiert wird - der Teil wird aber vom Compiler richtig erkannt.
Es ist der untere Teil
Delphi-Quellcode:
{$IFDEF ZWEI}
function LeseWert_a(inifile : WideString) : double;
{$ENDIF}
der nicht kompiliert wird und dass deshalb aus der anderen Datei nicht darauf zugegriffen werden kann. Die Bedingung ist unter Projekt/Optionen eingestellt und sollte damit ja global gültig sein.
Ich habe mal zur Probe die Direktiven von der Struktur her gleich gemacht:
Delphi-Quellcode:
{$IFDEF EINS}
//nix
{$ELSE IFDEF ZWEI}
function LeseWert_a(inifile : WideString) : double;
{$ENDIF}
und damit funktioniert es, die unter Bedingung ZWEI eingebundenen Routinen werden kompiliert.



In der D6-Hilfe stand immer, $IFDEF wäre veraltet. Das steht in der 2009-Hilfe aber nicht mehr so drin.
Ich vermute mal, ich würde es so zum Laufen bekommen, würde aber gerne wissen, WARUM.
Ich versuche das morgen mal so zu isolieren, dass man es anhängen kann (oder bis dahin hat es jemand erklären können).

Grüße, Messie
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.009 Beiträge
 
Delphi 12 Athens
 
#7

Re: Anderes Verhalten der Bedingungen in RAD2009?

  Alt 30. Jun 2009, 18:44
Zitat von messie:
Das komische daran ist, dass der erste Teil mit dem $ELSE IFDEF im Ausgangspost hier in verschiedenen Varianten diskutiert wird - der Teil wird aber vom Compiler richtig erkannt.
Das sehe ich aber nicht so! Der Code wird nicht deswegen kompiliert, weil ZWEI definiert ist, sondern weil EINS nicht definiert ist!
Uwe Raabe
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Anderes Verhalten der Bedingungen in RAD2009?

  Alt 30. Jun 2009, 19:06
Das leuchtet ein. Aber warum wird dann im Fall des alleinstehenden $IFDEF ZWEI nicht geprüft?



Nach der nochmaligen Untersuchung der Menüs stelle ich fest, dass ich die Bedingung für den Ressourcencompiler angegeben habe.
Der bietet sich beim Öffnen gleich so an, während man die Bedingungen für den Delphi-Compiler erst im Kleingedruckten suchen muss.

Also eine solcher Menüaufbau - das wäre ja fast schon ein Punkt für den Thread
Allgemein unbeliebtes Verhalten von Anwendungen


Danke für die Erleuchtung!

Messie
  Mit Zitat antworten Zitat
samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#9

Re: Anderes Verhalten der Bedingungen in RAD2009?

  Alt 30. Jun 2009, 19:12
Also ich glaube ja, <Spekulation>das "Zwei" bei den Optionen nicht unter "Delphi-Compiler", sondern unter "Resource-Compiler" eingestellt ist </Spekulation> und es deshalb nicht funktioniert.

edit: zu spät - da lag ich zwar richtig, aber er hat es schon selbst gesehen...
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#10

Re: Anderes Verhalten der Bedingungen in RAD2009?

  Alt 30. Jun 2009, 19:23
Zitat von samso:
Also ich glaube ja, <Spekulation>das "Zwei" bei den Optionen nicht unter "Delphi-Compiler", sondern unter "Resource-Compiler" eingestellt ist </Spekulation> und es deshalb nicht funktioniert.

edit: zu spät - da lag ich zwar richtig, aber er hat es schon selbst gesehen...
Ja, das grinst einen da ganz verführerisch an. Und ich hätte schon erwartet, das gleiche Einstellungen auf der gleichen Node-Ebene sind und sich optisch gleich darstellen.

Danke, Messie
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 20:08 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