C Exe in C++ Lib
-
Hallo,
ich habe ein Hauptprogramm Main.exe, das ein Hilfstool Util.exe bei Bedarf aufruft.
Nun musste ich die Util.exe in eine statische Lib (Util.a) umwandeln. Das Problem: Die alte Util.exe ist purer C Code und benutzt in den Funktionen viele lokale, statische Variablen. Beispiel:Main.exe erzeugt Prozess Util.exe und main() in Util.exe ruft dann funktionA() auf: void funktionA() { static int varA = 0; static int varA2 = 3; int i; ... funktionB(); } void funktionB() { static int varB = 1; int k; .. usw }In der neuen Version ruft Main.exe direkt eine Funktion start() aus Util.a auf, die dann funktionA() aufruft.
Das Problem: Wenn die Funktionen von Util durchlaufen werden, behalten die ganzen statischen Variablen ja ihren Wert. Irgendwann ist das Programm ferig und alle statischen Variablen haben einen Wert. In der alten Version war Util eine exe und wurde nach Ablauf beendet und dadurch natuerlich alle Variablen zerstoert. Beim naechsten Durchlauf von Util.exe starteten alle statischen Variablen wieder bei ihrem Defaultwert.In der neuen Version ist Util ja eine statische Lib und wenn ich start() aus Util.a aufgerufen habe, haben alle statischen Variablen ihre Werte und beim 2. Aufruf von start() startet der Algorithmus mit den Werten des letzten Durchlaufs statt mit den Defaultwerten.
Wie koennte ich die ganzen statischen, lokalen Variablen so aendern, dass jeder Durchlauf gleich laeuft?
Im Moment faellt mir nur ein jede Funktion zu einer Methode zu machen, alle statischen, lokalen Variablen zu einer Membervariable und dann eine init() Methode, die alle Werte auf die Defaultwerte setzt. Klingt aber irgendwie unschoen:(
-
Wilde Idee um schnell an Ergebnisse zu kommen:
Mach einclass Main_exe { /* hier der alte Code */ };drumherum. Die alte main-Funktion nennst du um zum Konstruktor dieser Klasse. Eventuelle statische globale Variablen initialisierst du im Konstruktor.