Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi {$IF exists(...)} the include (https://www.delphipraxis.net/139786-%7B%24if-exists-%7D-include.html)

himitsu 5. Sep 2009 08:18


{$IF exists(...)} the include
 
Tachchen,

da gab's grad 'ne blöde Idee meinerseits

diese sah nun so aus (wo das $IF doch auch schon "Funktionen" wie Declared und Defined kennt)
Delphi-Quellcode:
{$IF Exists('himXML_Lang.inc')}
  {$INCLUDE 'himXML_Lang.inc'}
{$ELSE}
  ...
{$IFEND}
Komischer Weise wird dieses ohne zu murren compiliert,
also muß es die "Function" Exists ja wohl geben.

PS: {$IF FileExists(...)} geht nicht
und ich bin anfangs durch 'nen Denkfehler nur auf Exists gekommen (die guten alten BatchFiles lenkten mich wohl etwas ab) und hab es gleich damit probiert.


Nun die Frage(n):

> Ist sowas überhaupt möglich? Also etwas nur einzubinden, wenn es existiert.

> Was macht nun Exists? Nach der Datei sucht es jedenfalls nciht, denn da ist es geal, ob diese Existiert oder nicht.


dat himilein

jaenicke 5. Sep 2009 09:34

Re: {$IF exists(...)} the include
 
Zitat:

Zitat von himitsu
Komischer Weise wird dieses ohne zu murren compiliert,
also muß es die "Function" Exists ja wohl geben.

Meinst du? Hmm, dann probier mal das aus: :zwinker:
Delphi-Quellcode:
{$IF sendtohimitsu('hallo')}
Kuckuck
{$ELSE}
{$IFEND}

turboPASCAL 5. Sep 2009 09:35

Re: {$IF exists(...)} the include
 
Zitat:

Nun die Frage(n):

> Ist sowas überhaupt möglich? Also etwas nur einzubinden, wenn es existiert.
Nein, nicht das ich wüsste.

Zitat:

> Was macht nun Exists? Nach der Datei sucht es jedenfalls nciht, denn da ist es geal, ob diese Existiert oder nicht.
Nüschts.

Du kannst ja och mal

Delphi-Quellcode:
{$IF Himilein}
          MessageBox(0, PCHAR('Nö'), 'Doch', MB_OK);
        {$IFEND}
ausprobieren.

himitsu 5. Sep 2009 10:15

Re: {$IF exists(...)} the include
 
Delphi-Quellcode:
{$IF FileExists('himXML_Lang.inc')}
  {$INCLUDE 'himXML_Lang.inc'}
{$ELSE}
  ...
{$IFEND}
aber hier meckert der Compiler ... komisch :gruebel:

Zitat:

Zitat von turboPASCAL
Nein, nicht das ich wüsste.

das ist aber gemein http://fnse.de/S01/1LK.gif

turboPASCAL 5. Sep 2009 10:30

Re: {$IF exists(...)} the include
 
Zitat:

Zitat von himitsu
Delphi-Quellcode:
{$IF FileExists('himXML_Lang.inc')}
  {$INCLUDE 'himXML_Lang.inc'}
{$ELSE}
  ...
{$IFEND}
aber hier meckert der Compiler ... komisch :gruebel:

Nö, macht er nicht in sofern die SysUtils nicht eingebunden ist. ;)

Stevie 7. Sep 2009 07:02

Re: {$IF exists(...)} the include
 
Zitat:

Zitat von himitsu
Ist sowas überhaupt möglich? Also etwas nur einzubinden, wenn es existiert.

Zitat:

Zitat von turboPASCAL
Nö, macht er nicht in sofern die SysUtils nicht eingebunden ist. ;)

Und dann sagt dir der Compiler sogar die Antwort: "Constant expression expected"

himitsu 7. Sep 2009 07:35

Re: {$IF exists(...)} the include
 
Zitat:

Zitat von Stevie
Und dann sagt dir der Compiler sogar die Antwort: "Constant expression expected"

Dennoch wäre es ja möglich, daß der Compiler dort auch nichtkonstante Funktionen anbieten könnte.

Hätte ja sein können, daß das schon welche eingebaut sind :angel2:

turboPASCAL 7. Sep 2009 08:11

Re: {$IF exists(...)} the include
 
Es ist aber schon ein kleiner Wiederspruch in sich das der Compiler an sich beim kompilieren
eine Function ausführt die gerade am kompilieren ist.. ?!* :gruebel:

himitsu 7. Sep 2009 08:29

Re: {$IF exists(...)} the include
 
Zitat:

Zitat von turboPASCAL
Es ist aber schon ein kleiner Wiederspruch in sich das ...

Wieso?

die Funktion, welche man so aufrufen möchte, müßte ja eh schon vorher kompiliert wurden sein
und wer sagt, daß er z.B. keine vorkompilierten/externen Funktionen nehmen darf?

> da hätten ja auch schon welche im Kompiler drin sein können

jedenfalls wäre das doch eine super Ergänzung zu den Pre-/Postcompile-Scripts?

jaenicke 7. Sep 2009 08:32

Re: {$IF exists(...)} the include
 
Mit den Skripten könnte man so etwas ja auch realisieren. Das ginge sogar direkt mit den Kommandozeilenerweiterungen unter XP usw. mit Batchdateien.

Ich selbst nutze um die Abwärtskompatibilität zu wahren externe Build- und Distributionsskripte, die diese Sachen ggf. konfigurieren, die Projekte erzeugen, die Verzeichnisse säubern, die Pakete erstellen und am Ende diese via FTP hochladen (die automatische Aktualisierung in den Foren und auf meiner Seite kommt noch :mrgreen:).

himitsu 7. Sep 2009 08:41

Re: {$IF exists(...)} the include
 
genau darum wollte ich ja keine dieser "externen" Scripte verwenden

himXML ist ja nur ein Programmteil, also kann ich z.B. die Pre-/Postcompile-Sachen schlecht in den (nichtvorhandenen) Projektoptionen voreinstellen.

Es wäre nur schön gewesen, wenn sowas möglich gewesen wäre, dann hätt ich den Hauptteil wieder komplett in nur einer Datei.

Aber gegen viele andere Komponenten ist es ja schon wenig, wenn man mindestens nur die Hauptunit und eine Sprachunit benötigt ... die anderen Units sind alle optional.
Im Grunde kann ich ja dennoch die Hauptsprachstrings dennoch eingebaut lassen und binde eben eine zusätzliche/alternative Sprachedatei via einem manuell einstellbarem Compilerschalter ein. :angel:

Kalfany 7. Sep 2009 12:23

Re: {$IF exists(...)} the include
 
spricht irgendwas dagegen das so zu machen?

Delphi-Quellcode:
if FileExists('himXML_Lang.inc') then
begin
   {$DEFINE LANG_EXISTS}
end;

{$IFDEF LANG_EXISTS} 
  {$INCLUDE 'himXML_Lang.inc'} 
{$ELSE} 
  ...
{$IFEND}
habs jetzt nicht getestet ... sollte aber funktionieren :gruebel:

Edit: muss natürlich FileExists heissen

Neutral General 7. Sep 2009 12:28

Re: {$IF exists(...)} the include
 
Ich denke das wird nicht funktionieren.

Compilerschalter sind unabhängig von dem Code drumrum...

himitsu 7. Sep 2009 12:37

Re: {$IF exists(...)} the include
 
Zitat:

Zitat von Neutral General
Compilerschalter sind unabhängig von dem Code drumrum...

erstmal das ... hatte mal versucht mit sowas rauszufinden, ob eine Funktion eingelinkt wurde und nur dann die darin verlinkten Variablen wo anders zu initialisieren.
(also das $DEFINE in die Funktion eingebaut)
blöd ist halt, daß diese Initialisierung und auch die Variablen (durch die Initialisierung) immer vorhanden sind, selbst wenn sie nicht benötig werden. :wall:

Delphi-Quellcode:
if FileExists('himXML_Lang.inc') then
und dann bringt dieses so nur etwas zur Laufzeit (wo dieser Code ausgeführt wird) und nicht schon wärend des Kompilierens

Kalfany 7. Sep 2009 13:01

Re: {$IF exists(...)} the include
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von Neutral General
Compilerschalter sind unabhängig von dem Code drumrum...

erstmal das ... hatte mal versucht mit sowas rauszufinden, ob eine Funktion eingelinkt wurde und sie nur dann die darin verlinkten Variablen wo anders zu initialisieren.
(also das $DEFINE in die Funktion eingebaut)
blöd ist halt, daß diese Initialisierung und auch die Variablen (durch die Initialisierung) immer vorhanden sind, selbst wenn sie nicht benötig werden. :wall:

Delphi-Quellcode:
if FileExists('himXML_Lang.inc') then
und dann bringt dieses so nur etwas zur Laufzeit (wo dieser Code ausgeführt wird) und nicht schon wärend des Kompilierens

stimmt daran hab ich garnicht gedacht :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 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