Hallo an alle! Ich würd ja nicht fragen, wenn ich nicht der Meinung wäre, dass es wirklich was neues ist. Fasst jeder von euch hat doch bereits eine Konsolenanwendung programmiert. Doch anders als bei Programmen, bei denen man ein Fenster und ähnliches hart selbst programmieren muss, scheint dies bei Konsolenanwendungen nicht der Fall sein zu müssen. Ich möchte nun wissen, wo der große Unterschied zwischen Konsolenanwendungen und dem Rest liegt, und welche Arbeit mir der Compiler oder die IDE beim Erstellen einer Konsolenanwendung abnimmt. Mit freundlichen Grüßen Patrick O.
Patrick O. wrote: > Doch anders als bei Programmen, bei > denen man ein Fenster und ähnliches hart selbst programmieren muss, > scheint dies bei Konsolenanwendungen nicht der Fall sein zu müssen. Bei einer Konsolenanwendung muss man sich nie um die Programmierung irgendwelcher Fenster kümmern. Aber nicht, weil es einem abgenommen wird, sondern weil eine Konsolenanwendung einfach keine Fenster hat. Sie läuft auf/in einer Text-Konsole (daher der Name).
.. ausser man benutzt die Cursor-Steuerbefehle und versetzt den Cursor um ein textbasiertes Grafikfenster zu haben GRuß Gerd.
> Ich möchte nun wissen, wo der große Unterschied zwischen > Konsolenanwendungen und dem Rest liegt, Das hängt vom System ab. Unter Linux gibt es z.B. keinen Unterschied. Unter Windows dagegen schon, da die Konsolenausgabe hier nicht einfach in ein virtuelles Terminal geleitet wird, sondern das Programm selbst ein Konsolen-Fenster aufmachen muß. > und welche Arbeit mir der Compiler oder die IDE beim Erstellen einer > Konsolenanwendung abnimmt. Die IDE hat eigentlich nicht viel damit zu tun. Wenn's um Windows gehen sollte, so nimmt dir der Compiler das Erzeugen des Konsolenfensters und Umleiten der Standard-Ein- und -Ausgabe ab.
Der Initiator nochmal Wie gehts? Ich hätte da noch ne Frage. Kann es sein, dass es in ner dll von Windows ne Funktion gibt, die ein Konsolenfenster für den momentanen Prozess zur Verfügung stellt? Auf wiederlesen
> Kann es sein, dass es in ner dll von Windows ne Funktion gibt, die ein > Konsolenfenster für den momentanen Prozess zur Verfügung stellt? Ja, das kann sein.
Eine Windows-Konsolanwendung hat keine Message-Queue und kann daher keine Windowsmessages empfangen. Sie unterscheidet sich nicht prinzipiell von einer Anwendung, wie man sie früher für DOS schrieb - das verfügt über keinerlei Window-Funktionalität. Man kann unter Windows sogar noch das alte DOS-API verwenden und .com-Programme schreiben - primitiver gings auch zu DOS-Zeiten nicht... Das Konsolfenster, das sich beim Start einer Konsol-App öffnet, wird von Windows bereitgestellt.
> Sie unterscheidet sich nicht > prinzipiell von einer Anwendung, wie man sie früher für > DOS schrieb - das verfügt über keinerlei Window-Funktionalität. Nicht ganz. Einerseits kann eine Win32-Konsolenapplikation die Win32-API verwenden, was doch ein kleines bisschen andere Möglichkeiten bietet, andererseits kann eine Win32-Konsolenapplikation durchaus auch mit Windows-Fenstern zusammenarbeiten, am simpelsten geht das beispielsweise mit MessageBox(), aber auch das Senden von Nachrichten an andere Fenster ist möglich. Ebenso kann eine Konsolenapplikation nachträglich einen Nachrichtenhandler installieren und dann auf "normale" Art und Weise mit Fenstern hantieren.
Wird das Konsolenfenster also vom Betriebssystemgeöffnet, nachdem oder bevor es den Portable Executable Kopf der anwednung durchgegangen is? Aber woher weiß das BS nun, dass es das dann doch nicht öffnen muss? Zum Beispiel bei ner Fensteranwendung.
Das wird durch Flags im PE Header entschieden, wie IMAGE_SUBSYSTEM_WINDOWS_GUI und IMAGE_SUBSYSTEM_WINDOWS_CUI. Damit ist also auch klar, daß das Konsolenfenster erst nach Interpretation der Flags geöffnet/erzeugt oder beibehalten wird.
Rufus t. Firefly wrote: > Damit ist also auch klar, daß das Konsolenfenster erst /nach/ > Interpretation der Flags geöffnet/erzeugt oder beibehalten wird. Allerdings wird das festgestellt, bevor die Applikation zum ersten mal die Kontrolle erhält.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.