Mittwoch, 8. Juli 2009

Externe Variablen in Free Pascal

Vor kurzem schrieb ich über die Möglichkeit, das Datum und die Zeit des Kompilierens in einem Free-Pascal-Programm zu hinterlegen ({$I %DATE%} und {$I %TIME%}). Nun kann es vorkommen, dass man diese Daten in einem komplexeren Projekt mit vielen Units verwendet. Angezeigt werden sie zum Beispiel in einer Unit X. Diese Unit wird aber nicht immer neu kompiliert. Nur, wenn sich an der Unit X selbst etwas geändert hat, wird diese ja neu kompiliert. Wenn nicht, dann bleibt die Anzeige von Datum und Uhrzeit auf dem alten Stand.

Man muss nun also einen Teil des Projekts finden, der immer neu kompiliert wird. Das ist die Hauptprogrammdatei. Dann muss man in dieser Hauptdatei Variablen definieren, die Datum und Zeit aufnehmen. Auf diese Variablen kann dann aus der Unit X heraus zugegriffen werden. Hier ein Beispiel.

Das Hauptprogramm:
PROGRAM Test;
USES TestUnit;

VAR
BuildString: String = '[' + {$I %DATE%} + ' ' + {$I %TIME%} + ']';
CVAR; EXPORT;

BEGIN
TestOut;
END.
Die Unit, die Datum und Uhrzeit zur Anzeige bringt:
UNIT TestUnit;

INTERFACE

PROCEDURE TestOut;

IMPLEMENTATION

VAR
BuildString: String; CVAR; EXTERNAL;

PROCEDURE TestOut;
BEGIN
WriteLn('BuildString: ', BuildString);
END;

END.
Hier wird der Einfachheit halber nur eine Variable deklariert, die beides aufnimmt. Entscheidend ist, dass wir im Hauptprogramm die Variable zur Verwendung in anderen Units freigeben. Hier wird das durch CVAR; EXPORT; erreicht. In der Unit, die die Variable dann verwendet, wird die Variable als CVAR; EXTERNAL; deklariert, um anzuzeigen, dass auf eine Definition der Variable in einer anderen Übersetzungseinheit zugegriffen wird.

Keine Kommentare:

Kommentar veröffentlichen