![]() |
Anderes Verhalten der Bedingungen in RAD2009?
Moin,
ich habe beim Umstellen eines Projektes von D6 auf RAD2009 ein merkwürdiges Verhalten. In der einen Datei habe ich
Delphi-Quellcode:
in einer weiteren Datei steht dann
{$IFDEF EINS}
wert_a := 0; {$ELSE IFDEF ZWEI} wert_a := LeseWert_a(inifile); {$ENDIF}
Delphi-Quellcode:
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).
{$IFDEF ZWEI}
function LeseWert_a(inifile : WideString) : double; {$ENDIF} 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 |
Re: Anderes Verhalten der Bedingungen in RAD2009?
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.
|
Re: Anderes Verhalten der Bedingungen in RAD2009?
Hi!
Kannst du mal ein kleines Testpackage zum ausprobieren anhängen, in dem das Problem auftritt. Grüße, Frederic |
Re: Anderes Verhalten der Bedingungen in RAD2009?
Versuch mal dies:
Delphi-Quellcode:
Man beachte auch den veränderten Abschluss mit $IFEND!
{$IFDEF EINS}
wert_a := 0; {$ELSEIF Defined(ZWEI)} wert_a := LeseWert_a(inifile); {$IFEND} Bei einem Konstrukt wie {$ELSE IFDEF xyz} wird das IFDEF eigentlich komplett ignoriert. |
Re: Anderes Verhalten der Bedingungen in RAD2009?
Delphi-Quellcode:
das "IFDEF ZWEI" wird vom Compiler mehr wie ein Kommentar behandelt und nicht ausgewertet ...
{$ELSE IFDEF ZWEI}
man kann auch genausogut sowas machen:
Delphi-Quellcode:
wobei hier das bei ENDIF ebenfalls als Kommentar angesehn wird.
{$IFDEF ZWEI}
{$ENDIF ZWEI} wenn der Compiler das $IF-Konstrukt unterstützt, dann ginge es so
Delphi-Quellcode:
ansonsten bleibt dir nur dieser Weg:
{$IF Defined(EINS)}
{$ELSEIF Defined(ZWEI)} {$IFEND}
Delphi-Quellcode:
{$IFDEF EINS}
{$ELSE} {$IFDEF ZWEI} {$ENDIF} {$ENDIF} |
Re: Anderes Verhalten der Bedingungen in RAD2009?
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:
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.
{$IFDEF ZWEI}
function LeseWert_a(inifile : WideString) : double; {$ENDIF} Ich habe mal zur Probe die Direktiven von der Struktur her gleich gemacht:
Delphi-Quellcode:
und damit funktioniert es, die unter Bedingung ZWEI eingebundenen Routinen werden kompiliert.
{$IFDEF EINS}
//nix {$ELSE IFDEF ZWEI} function LeseWert_a(inifile : WideString) : double; {$ENDIF} :wiejetzt: 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 |
Re: Anderes Verhalten der Bedingungen in RAD2009?
Zitat:
|
Re: Anderes Verhalten der Bedingungen in RAD2009?
Das leuchtet ein. Aber warum wird dann im Fall des alleinstehenden $IFDEF ZWEI nicht geprüft?
:gruebel: Nach der nochmaligen Untersuchung der Menüs stelle ich fest, dass ich die Bedingung für den Ressourcencompiler angegeben habe. :oops: 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 |
Re: Anderes Verhalten der Bedingungen in RAD2009?
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... |
Re: Anderes Verhalten der Bedingungen in RAD2009?
Zitat:
Danke, Messie |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:54 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