Table of Contents

Bedingtes Kompilieren

Informationen

  • Kategorien: Kernel | Klassenformeln
  • Version: 19.0.0.7732
  • Veröffentlichungsdatum: Sonntag, 27. September 2015
  • Entwickler: Fischer
  • Benötigt Datenbankänderung: Nein
  • Betreff: Präprozessor-Direktiven #if, #else und #endif für Klassenformeln, Macro, Compile-Konfiguration

Beschreibung

Mittels der Präprozessor-Direktiven #if, #else und #endif können Teile des Programmcodes abhängig vom Wert vordefinierter Macros vom Kompilieren ausgenommen werden.

Der vom Kompilieren ausgenommene Programmcode wird wie Kommentar behandelt, der Kompiler sieht und überprüft diesen Programmcode nicht.

Syntax:

<Präprozessor-Direktive>:

#if #endif

oder

#if #else #endif

: // =

oder

! // = not

Falls = TRUE, wird der Programmcode innerhalb des #if-Blocks kompiliert, der des #else-Blocks vom Kompilieren ausgenommen. Falls = FALSE wird entsprechend der Programmcode des #if-Blocks vom Kompilieren ausgenommen, der des #else-Blocks wird kompiliert.

#if .. #else .. #endif Strukturen dürfen beliebig verschachtelt werden (siehe Beispiel).

Es existieren aktuell folgende vordefinierten Macros:

  • RUNNING_IN_UI_MODE
  • RUNNING_AS_SERVICE

Ihr Wert wird durch die aktive Compile-Konfiguration bestimmt.

Es existieren folgende vordefinierte Compile-Konfigurationen:

  • UserInterface (RUNNING_IN_UI_MODE=true, RUNNING_AS_SERVICE=false, interaktive Funktionen dürfen aufgerufen werden)
  • Service (RUNNING_IN_UI_MODE = false, RUNNING_AS_SERVICE = true, interaktive Funktionen dürfen nicht aufgerufen werden)

Beim Kompilieren im Editor wird die aktive Konfiguration in einer Combobox eingestellt. Die hier verfügbaren Konfigurationen sind abhängig von den Schaltern 'b_ActiveInServiceMode' und 'b_ActiveInUIMode' der Klassenformel. Falls beide Schalter gesetzt sind, sind beide Konfigurationen verfügbar, ansonsten nur eine.

Soll die Klassenformel gespeichert werden, so werden automatisch alle verfügbaren Konfigurationen testweise kompiliert. So ist sichergestellt, dass fehlerhafter Code nicht gespeichert wird.

Beim Kompilieren des gesamten Projekts (beim Programmstart) wird die aktive Konfiguration automatisch bestimmt.

  • Falls das Programm als Service oder im ServiceTestMode läuft ist die Konfiguration 'Service' aktiv.
  • Ansonsten ist die Konfiguration 'UserInterface' aktiv.

Der ServiceTestMode wird durch den Eintrag [DEBUG] SERVICETESTMODE=TRUE in system\config\settings.ini aktiviert.

Weitere projektspezifische Macros können in der pit-FM Registry unter Schlüssel "External\ENTITYFUNCTION\Classform\Macros" als Werte definiert werden. Jeder hier angegebene Wert-Objekt wird als Macro eingelesen. Der Name des Wert-Objekts entspricht dem Namen des Macro. Als Wert sind nur Ganzzahlen erlaubt. Das Macro ist true, falls der Wert ungleich 0 ist, ansonsten false.

Bilder

Bedingtes Kompilieren

Beispielcode

#if RUNNING_IN_UI_MODE 
	// Benutzerinteraktion sind erlaubt
	//
	$bContinue = MessageBox( "Weitermachen ?", "YESNO" ) == 1;

#else 
	// Benutzer kann nicht gefragt werden, einfach weitermachen
	//
	$bContinue = 1;

	#if CAN_USE_EXCEL // projektspezifisches Macro aus Registry
	
		// lokales Programm starten
		//
		ShellExecute( "Excel.exe", "C:\\temp\\test.csv", "");

	#endif
#endif