Visual C++: Rückgabewert an Konsolen-Aufrufstelle

Ich habe das Problem, dass meine Anwendung jeweils einen Wert an die Konsolen-Aufrufstelle zurück liefern muss, der von dort dann von einer anderen Anwendung übernommen wird. Wenn ich eine normale Konsolenanwendung habe, dann kann ich über int main(int argc, char *argv[]) das soweit realisieren.
Jetzt habe ich aber eine Windows-GUI-Anwendung, unter Verwendung der WinAPI, die noch dazu rein Dialogbasiert ist. Mein Projekt enthält also keine Mainfrm-Klasse, sondern nur eine Haupt-App-Klasse mit der Methode InitInstance.

Ich hatte naiverweise gehofft, dass die returns aus InitInstance() heraus auf der Konsole ankommen würden. Dem ist aber nicht so. Daraufhin hatte ich es mit PostQuitMessage in InitInstance() probiert, aber leider auch ohne Erfolg. Das ganze entwickelte Programm funktioniert schon insgesamt einwandfrei, eben bis auf das Problem mit den Rückgabewerten an die Konsole. Die müssen aber laut Fachkonzept zwingend sein. Kann mir jemand bitte, am besten mit einem Beispielcode, sagen, wie ich meiner Dialogbasierten Anwendung Rückgabewerte beibringen kann, die beim Programmende auf der Konsole ankommen ?

Hallo,
ein Programm mit GUI das du aus der Kommandozeile heraus direkt durch Angabe des Programmnamens startest beginnt sofort im Hintergrund und die Kommandozeile erhält einen

%errorlevel%

von 0 bei erfolgreichem Start. Der Rückgabewert geht dabei verloren, da das GUI Programm komplett unabhängig von der Konsole läuft.
Zu deiner Erleichterung kann ich dir aber sagen, dass es dennoch eine einfache Möglichkeit gibt den Rückgabewert zu erhalten. Du musst dafür dein Programm nur mit

START /WAIT prog.exe

starten, anstatt direkt mit der Angabe des Programmnamens. Die Konsole startet dann deinen neuen Prozess und wartet auf dessen Beendigung und danach steht der korrekte Rückgabewert aus deinem Hauptprogramm in der Variable %errorlevel%.
Alternativ zu diesem kleinen Hack über ein besonderes Starten des Programms aus der Kommandozeile, besteht auch noch die Möglichkeit ein kleines Hilfsprogramms zu schreiben das ganz normal in der Kommandozeile läuft. Es startet dann mittels CreateProcess dein Hauptprogramm und du übergibst dabei als letzten Parameter einen Pointer auf eine PROCESS_INFORMATION, die du dann später in der Funktion GetExitCodeProcess verwendest um den Rückgabewert des Hauptprogramms zu bekommen und an die Konsole weitergibst.
Dann hoffe ich mal, dass eines dieser Vorgehen für dich in Frage kommt :smile:
Liebe Grüße.
Alex