12 Stimmen

Delphi {$IFDEF CONSOLE} Problem

Ich habe gerade versucht

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

begin
  {$IFDEF CONSOLE}
    beep;
  {$ENDIF}
end.

und erwartete eine beep während der Laufzeit, aber nicht. Der folgende Test funktioniert jedoch:

  if IsConsole then
    beep;

Warum funktioniert der Kompilierzeittest nicht? Soweit ich das verstehen kann, ist dieses Dokument sollte es auf jeden Fall funktionieren.

10voto

Sertac Akyuz Punkte 53381

Wenn Sie in den Linker-Optionen "Konsolenanwendung erzeugen" auswählen, wird "CONSOLE" definiert.

4voto

kludg Punkte 26889

In der *.dpr-Datei funktioniert es nicht, aber in einer Unit ist es OK (MakeBeep von der Konsole aus aufrufen *.dpr):

unit Unit1;

interface

uses
  SysUtils;

procedure MakeBeep;

implementation

procedure MakeBeep;
begin
  {$IFDEF CONSOLE}
    beep;
  {$ENDIF}
end;

4voto

vladon Punkte 7840

Übrigens: Nach Angaben von http://docwiki.embarcadero.com/RADStudio/XE3/en/Conditional_compilation_(Delphi) jetzt ist das "CONSOLE" Bedingungssymbol beim Kompilieren der Konsolenanwendung vordefiniert, so dass {$IFDEF CONSOLE} zumindest für XE2 und XE3 funktioniert.

Für XE und ältere Versionen gibt es keine derartigen Informationen.

3voto

Edelcom Punkte 4948

En $APPTYPE steuert, ob eine Win32-Konsolen- oder eine grafische UI-Anwendung erzeugt werden soll, sie ist KEINE Compiler-Direktive.

{$ifdef} prüft auf benutzerdefinierte Compiler-Direktiven, die durch {$define name} Erklärungen. Wie in

{$define KeepDlibTempFiles}

Stattdessen kann die Option "IsConsole" verwendet werden (wie Sie bereits herausgefunden haben).

2voto

tndza Punkte 21

Einfachere Lösung:

program YourProgram;
{$DEFINE MakeConsoleApp}
{$IFDEF MakeConsoleApp}
  {$APPTYPE CONSOLE}
{$ENDIF}

[....]
{$IFDEF MakeConsoleApp} WriteLn('Text in a Console'); {$ENDIF}

Wenn Sie also möchten, dass Ihre Anwendung keine Konsole anzeigt, ändern Sie einfach {$DEFINE MakeConsoleApp} in { } oder {.$DEFINE MakeConsoleApp}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X