Problem Qt GUI oder Console je nach Aufruf starten

Alles rund um die Programmierung mit Qt
Antworten
buggybear
Beiträge: 17
Registriert: 13. April 2007 17:59

Problem Qt GUI oder Console je nach Aufruf starten

Beitrag von buggybear »

Hi,

ich möchte ganz gerne mein Programm je nach Aufrufparameter, wahlweise als Konsolen Applikation oder als GUI Applikation starten. Ist das prinzipiell überhaupt möglich?
Also wenn man die executable so startet soll die GUI gezeigt werden. Startet man hingegen z.b. executable.exe console soll nur die console gezeigt werden. Soweit funktioniert es auch, nur bekomme ich jedesmal eine Speicherverletzung bei der consolen Variante und mir ist nicht klar warum...

---------------------------
executable.exe - Fehler in Anwendung
---------------------------
Die Anweisung in "0x0040b9e1" verweist auf Speicher in "0x0000001c". Der Vorgang

"read" konnte nicht auf dem Speicher durchgeführt werden.


Klicken Sie auf "OK", um das Programm zu beenden.
Klicken Sie auf "Abbrechen", um das Programm zu debuggen.
---------------------------
OK Abbrechen
---------------------------

Mein Code sieht prinzipiell so aus:

main.cpp

Code: Alles auswählen

int main(int argc, char *argv[])
{
        bool console = false;

	for (int i = 1; i < argc; i++)
	{
		if (strcmp(argv[i], "console") == 0) 
		{
			console = true;
		}
        }

        if (console) 
       {
		Blubb::blah();
		return 0;
	}
	else
	{
		QApplication app(argc, argv);

		Dialog dialog = new Dialog();

                return app.exec();
        }
}

Habe ich vielleicht etwas nicht beachtet, oder gehts prinzipiell nicht?
Eltharion
Beiträge: 74
Registriert: 4. Mai 2006 14:42
Wohnort: Magdeburg
Kontaktdaten:

Beitrag von Eltharion »

Sollte gehen. Du linkst Deine Anwendung mit dem console-Flag, so dass eine Konsole standardmässig geöffnet wird und je nach Parametern machst Du die Konsole sofort zu, wenn Du sie nicht brauchst:

http://msdn2.microsoft.com/en-us/library/ms683150.aspx

Andersrum kannst Du auch z.B. via AllocConsole() eine neue öffnen und dann ein paar Handles umbiegen. Wobei ich da nicht auf Anhieb wüsste, ob man da irgendwas beachten muss. Würde mir dazu mal den Startup-Code von Qt anschauen.

E*
buggybear
Beiträge: 17
Registriert: 13. April 2007 17:59

Beitrag von buggybear »

Eltharion hat geschrieben:Sollte gehen. Du linkst Deine Anwendung mit dem console-Flag, so dass eine Konsole standardmässig geöffnet wird und je nach Parametern machst Du die Konsole sofort zu, wenn Du sie nicht brauchst:
Ja, das mache ich ja schon. Ich verstehe nur die Exception nicht, wenn ich mit console Parameter starte. Dürfte ja nur der if Teil durchlaufen werden, oder? Lasse ich den else teil mal weg, läufts problemlos... nur zusammen irgendwie nicht.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ich würde es einfach mal mit debuggen versuchen. Schätze Du greifst auf irgendwas zu was nicht initialisiert ist - Blubb::blah(); sieht zumindest nicht sehr vertrauenserweckend aus. Des weiteren solltest Du Dir im Klaren sein dass in deinem console-Fall keine Eventloop vorhanden ist.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten