Zweites Konsolenfenster
-
hallo,
zwar ist es schon sehr spät, aber ich hab noch viel power
Kommen wir nun zu meinem Problem^^
Also ich hab mal ne main.cpp, die ich kompiliere(=> main.exe);
Gibt es eine Lösung, eine zweite cpp anzulegen und diese auch zu kompilieren?//main.cpp int main() { //... }
und
//zweites.cpp int main() { //... }
Ist zwar sicherlich ne blöde Frage, aber würd schon gerne wissen, ob es möglich wäre ein zweites Fenster zu erzeugen
Mit freundlichen Grüßen,
Daniel
-
Welches System?
Zwei Programme kannst du natürlich kompilieren, aber auf die gleichen Variablen kannst du dann nicht zugreifen. Fenster=>Windows
-
Hallo langweile,
langeweile schrieb:
Welches System?
Es wäre besser, wenns Systemunabhängig wäre, da ich hauptsächlich auch für Linux/Unix Programme schreibe
langeweile schrieb:
Zwei Programme kannst du natürlich kompilieren, aber auf die gleichen Variablen kannst du dann nicht zugreifen. Fenster=>Windows
Ich hab es um Ehrlich zu sein, nie gemacht, ein kleiner Einblick mit einem Beispiel wäre sehr nett
Das mit den Variablen weiß ich schon, aber nur nicht ob ich int main() in beiden verwenden darfMit freundlichen Grüßen,
Daniel
-
es geht nicht, glaub ich zumindest
-
Ein Programm -> zwei Konsolenfesnter ist nicht möglich.
Ein Programm -> zwei oder mehrere normale Windowsfesnter ist möglich, allerdings wirst du damit nicht sehr viel Freude haben, hier würdest du zuerst einmal mit einem umgehen lernen müssenZwei Programme -> zwei Konsolenfesnter ist möglich, allerdings, wie berets erwähnt, kein gemeinsamer Zugriff auf Variablen. Heißt: Du musst IPC (Inter-Prozess-Kommunikation) benutzen, je nach Kenntnisstand für dich leicht oder schwer zu erlernen. Jedenfalls aber sehr schwer plattformübergreifend.
Belasse es besser bei einem Fenster.
MfG SideWinder
-
Hallo SideWinder,
SideWinder schrieb:
Ein Programm -> zwei Konsolenfesnter ist nicht möglich.
Kann man vielleicht ein Konsolenfenster machen, das ein zweites aufruft? Also mit Systemunabhängigem "Befehl"(ich weiß, dass es sowas vllt. nicht gibt, kann ja aber sein^^)?
SideWinder schrieb:
Ein Programm -> zwei oder mehrere normale Windowsfesnter ist möglich, allerdings wirst du damit nicht sehr viel Freude haben, hier würdest du zuerst einmal mit einem umgehen lernen müssen
Nein, die WinAPI benutz ich nicht
SideWinder schrieb:
Zwei Programme -> zwei Konsolenfesnter ist möglich, allerdings, wie berets erwähnt, kein gemeinsamer Zugriff auf Variablen. Heißt: Du musst IPC (Inter-Prozess-Kommunikation) benutzen, je nach Kenntnisstand für dich leicht oder schwer zu erlernen. Jedenfalls aber sehr schwer plattformübergreifend.
Naja man könnte doch eine Funktion schreiben, die eine Funktion aufruft, die nur für Windows funktioniert und eine die nur für Linux funktioniert durch IF-Anweisungen, oder wär das nicht so einfach, wie ich es mir so vorstelle?
SideWinder schrieb:
Belasse es besser bei einem Fenster.
Zwei Fenster wären besser, da mein aktuelles Projekt sonst aufgrund von Platzmangel explodieren würde(Bin grad an einem Strategie/Denk Spiel: 1 MainFenster, 1 Navigationsfenster)
Mit freundlichen Grüßen,
Daniel
-
Kann man vielleicht ein Konsolenfenster machen, das ein zweites aufruft? Also mit Systemunabhängigem "Befehl"(ich weiß, dass es sowas vllt. nicht gibt, kann ja aber sein^^)?
Das dürfte eigentlich nicht funktionieren. Wie auch? In Konsolenanwendungen gibt es so gesehen keine Fenster, der Konsolentext wird unter Windows nur in einem Fenster dargestellt. Daß es sowas nicht geben kann, ist auch ganz einfach anschaulich zu machen: Stell Dir mal vor, Du würdest so eine Anwendung in DOS kompilieren. Wo sollte sich denn dann das zweite "Fenster" befinden, wenn der erste Konsolentext bereits im Vollbild auf dem gesamten Bildschirm ausgegeben wird?
Naja man könnte doch eine Funktion schreiben, die eine Funktion aufruft, die nur für Windows funktioniert und eine die nur für Linux funktioniert durch IF-Anweisungen, oder wär das nicht so einfach, wie ich es mir so vorstelle?
Mit if würde es wohl nicht funktionieren, aber mit #ifdef kannst Du generell das Betriebssystem abfragen und das Programm dann entsprechend anders ablaufen lassen. Also nicht nur auf Dein Problem bezogen, sondern auch bei allen anderen Sachen, wo das Programm unter Windows was anderes machen soll als unter Linux.
Zwei Fenster wären besser, da mein aktuelles Projekt sonst aufgrund von Platzmangel explodieren würde(Bin grad an einem Strategie/Denk Spiel: 1 MainFenster, 1 Navigationsfenster)
Naja, aber Konsolenanwendungen sind eben wirklich nicht dazu gedacht, irgendwas mit Fenstern zu tun zu haben. Da hast Du Dein Textfeld mit normalerweise 80x25 bzw. 80x50 Zeichen und das war's. Wenn Dir der Platz nicht ausreicht, mußt Du Dir etwas anderes ausdenken, zum Beispiel doch mit der WinAPI (bzw. einem Framework) und echten Fenstern zu arbeiten. Oder Du benutzt die (betriebssystemabhängigen) Befehle fürs Bildschirm löschen und gibst dem Benutzer so die Möglichkeit, per Knopfdruck zwischen beiden Ansichten hin- und herzuwechseln. So nach dem Motto:
cin>>aktion; if (aktion==ANSICHT_WECHSELN) { BildschirmLoeschen (); if (ansicht==MAIN_FENSTER) Bildaufbau (NAVIGATIONSFENSTER); else Bildaufbau (MAIN_FENSTER); /*Kurzschreibweise: Bildaufbau (ansicht==MAIN_FENSTER?NAVIGATIONSFENSTER:MAIN_FENSTER);*/ }
-
Zwei Fenster wären besser, da mein aktuelles Projekt sonst aufgrund von Platzmangel explodieren würde(Bin grad an einem Strategie/Denk Spiel: 1 MainFenster, 1 Navigationsfenster)
Mit der Improved Console von SideWinder kannst du das Konsolenfenster vergrößern, maximieren etc. Einfach mal angucken. Findest du hier im Forum.
-
Hallo mikey,
mikey schrieb:
Zwei Fenster wären besser, da mein aktuelles Projekt sonst aufgrund von Platzmangel explodieren würde(Bin grad an einem Strategie/Denk Spiel: 1 MainFenster, 1 Navigationsfenster)
Mit der Improved Console von SideWinder kannst du das Konsolenfenster vergrößern, maximieren etc. Einfach mal angucken. Findest du hier im Forum.
Ja, danke. Hab gerade geschaut, aber da meldet der Compiler schon die Fehler:
1>c:\users\daniel\desktop\projekte\X\X\ic.hpp(5) : warning C4005: '_WIN32_WINNT': Makro-Neudefinition
1> c:\users\daniel\desktop\projekte\X\X\stdafx.h(9): Siehe vorherige Definition von '_WIN32_WINNT'
1>Verknüpfen...
1>ic.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__ShowWindow@8" in Funktion ""public: void __thiscall ic::Console::hide(void)" (?hide@Console@ic@@QAEXXZ)".
1>ic.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__GetWindowRect@8" in Funktion ""public: int __thiscall ic::Console::getWndPosX(void)const " (?getWndPosX@Console@ic@@QBEHXZ)".
1>ic.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__SetWindowPos@28" in Funktion ""public: void __thiscall ic::Console::setWndPos(int,int)" (?setWndPos@Console@ic@@QAEXHH@Z)".
1>C:\Users\Daniel\Desktop\Projekte\X\Debug\X.exe : fatal error LNK1120: 3 nicht aufgelöste externe Verweise.Keine direkte Ahnung, was der Compiler meint, nur das '_WIN32_WINNT' zweimal vorkommt.. nähmlich in stdafx.h und ic.hpp(Neudefinition)
Mit freundlichen Grüßen,
DanielEDIT:
Aus den beiden Source-Dateien eine statische Library zu erstellen, sollte für Sie kein Problem darstellen (wenn doch, lesen Sie bitte auf der "Für Programmieranfänger"-Seite weiter). Bei etwaigen Problemen lesen Sie bitte die Hinweise unter "Wichtig" auf der Download-Seite. Sollte das Problem weiterhin bestehen, melden Sie sich in der Konsolensparte des C++.de-Forums.
... da hab ich mal keine Ahnung wie man ne statische Library macht -.-
-
Hi,
du hast die IC nicht korrekt ins Projekt eingebunden. Da du mit Visual Studio arbeitest, musst du so vorgehen:
-Konsolenprojekt erstellen
-In das Projekt einmal die ic.cpp einfügen
-Dann noch ic.hpp einfügen
-Und zum Schluss includierst du in der dritten, von dir erstellten *.cpp Datei (main.cpp) die ic.hpp ein, und stellst den Namespace auf ic::shorties und ic;Wenn du es dann kompilierst (wohlgemerkt, dein Projekt müsste nun 3 Codedateien haben), dann meckert der Compiler nicht mehr. (Ich hoffe mal, du hast das SDK von Microjunk vernünftig eingerichtet!)
... da hab ich mal keine Ahnung wie man ne statische Library macht -.-
Ist ganz einfach. Du musst vei VS ein Projekt erstellen, und zwar "Statische Library). Zu dem Projekt fügst du die ic.hpp und die ic.cpp ein, und kompilierst es. Fertig ist die *.lib Datei. Bei zukünftigen Projekten musst du diese Library nurnoch zum Projekt hinzulinken, und nicht mehr beide IC Dateien zum Projekt hinzufügen.
-
mikey schrieb:
Hi,
du hast die IC nicht korrekt ins Projekt eingebunden. Da du mit Visual Studio arbeitest, musst du so vorgehen:
-Konsolenprojekt erstellen
-In das Projekt einmal die ic.cpp einfügen
-Dann noch ic.hpp einfügen
-Und zum Schluss includierst du in der dritten, von dir erstellten *.cpp Datei (main.cpp) die ic.hpp ein, und stellst den Namespace auf ic::shorties und ic;Wenn du es dann kompilierst (wohlgemerkt, dein Projekt müsste nun 3 Codedateien haben), dann meckert der Compiler nicht mehr. (Ich hoffe mal, du hast das SDK von Microjunk vernünftig eingerichtet!)
hab ne main.cpp mit folgenden Includes(inkl. namespace):
#include "stdafx.h" #include <iostream> #include <vector> #include <conio.h> #include <windows.h> #include <string> #include <ctime> #include "cField.h" #include "ic.hpp" using namespace ic; using namespace ic::shorties;
dann noch zwei weitere Dateien: ic.hpp und ic.cpp!
Das Problem besteht immer noch, nähmlich das gleiche. Keine Ahnung, wieso es noch immer nicht geht?!
Mit freundlichen grüßen,
DanielP.s: So schaut die stdafx.h aus:
// stdafx.h : Includedatei für Standardsystem-Includedateien // oder häufig verwendete projektspezifische Includedateien, // die nur in unregelmäßigen Abständen geändert werden. // #pragma once #ifndef _WIN32_WINNT // Lassen Sie die Verwendung spezifischer Features von Windows XP oder später zu. #define _WIN32_WINNT 0x0501 // Ändern Sie dies in den geeigneten Wert für andere Versionen von Windows. #endif #include <stdio.h> #include <tchar.h> // TODO: Hier auf zusätzliche Header, die das Programm erfordert, verweisen.
-
Vergiss die Warnung mit der stdafx.h derweil mal. Hast du dir das SDK eigentlich eigerichtet? (http://msdn.microsoft.com/vstudio/express/visualc/usingpsdk/default.aspx)
-
mikey schrieb:
Hast du dir das SDK eigentlich eigerichtet?
Ja, sonst hätte ich den windows.h Header ja nicht eingebunden
-
Ja, sonst hätte ich den windows.h Header ja nicht eingebunden
Das ist völlig unerheblich. Es gibt Leute, die binden sich die windows.h ein, und wissen trotzdem nicht, dass sie sich das SDK nicht oder falsch eingerichtet haben.
So wie du deine stdafx.h einbindest, bringt sie sowieso nichts, und du kannst sie gleich rausschmeißen. Wenn dann packe alle Includes in diese stdafx.h, und inkludiere dann nur diese in die main.cpp. So bringt dir das beim Compilen auch einen Geschwindigkeitsvorteil, wozu die stdafx.h eigentlich auch gedacht ist. Und lösch diese beiden Includes aus der stdafx.h raus:
#include <stdio.h> #include <tchar.h>
Kompiliere in einem neuen Projekt diesen Code, und sag mir, ob er fehlerfrei kompiliert:
/* Creation of a simple Windows API program */ #include <windows.h> /* Declare Windows procedure */ LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); /* Make the class name into a global variable */ char szClassName[ ] = "WindowsApp"; int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { HWND hwnd; /* This is the handle for our window */ MSG messages; /* Here messages to the application are saved */ WNDCLASSEX wincl; /* Data structure for the windowclass */ /* The Window structure */ wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */ wincl.style = CS_DBLCLKS; /* Catch double-clicks */ wincl.cbSize = sizeof (WNDCLASSEX); /* Use default icon and mouse-pointer */ wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; /* No menu */ wincl.cbClsExtra = 0; /* No extra bytes after the window class */ wincl.cbWndExtra = 0; /* structure or the window instance */ /* Use Windows's default color as the background of the window */ wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND; /* Register the window class, and if it fails quit the program */ if (!RegisterClassEx (&wincl)) return 0; /* The class is registered, let's create the program*/ hwnd = CreateWindowEx ( 0, /* Extended possibilites for variation */ szClassName, /* Classname */ "Windows App", /* Title Text */ WS_OVERLAPPEDWINDOW, /* default window */ CW_USEDEFAULT, /* Windows decides the position */ CW_USEDEFAULT, /* where the window ends up on the screen */ 544, /* The programs width */ 375, /* and height in pixels */ HWND_DESKTOP, /* The window is a child-window to desktop */ NULL, /* No menu */ hThisInstance, /* Program Instance handler */ NULL /* No Window Creation data */ ); /* Make the window visible on the screen */ ShowWindow (hwnd, nFunsterStil); /* Run the message loop. It will run until GetMessage() returns 0 */ while (GetMessage (&messages, NULL, 0, 0)) { /* Translate virtual-key messages into character messages */ TranslateMessage(&messages); /* Send message to WindowProcedure */ DispatchMessage(&messages); } /* The program return-value is 0 - The value that PostQuitMessage() gave */ return messages.wParam; } /* This function is called by the Windows function DispatchMessage() */ LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) /* handle the messages */ { case WM_DESTROY: PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0; }
-
Ja,das kann ich fehlerfrei kompilieren, also heißt das auch,dass ich das SDK richtig eingebunden hab
Hmm aber
1>ic.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__ShowWindow@8" in Funktion ""public: void __thiscall ic::Console::hide(void)" (?hide@Console@ic@@QAEXXZ)".
1>ic.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__GetWindowRect@8" in Funktion ""public: int __thiscall ic::Console::getWndPosX(void)const " (?getWndPosX@Console@ic@@QBEHXZ)".
1>ic.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol "__imp__SetWindowPos@28" in Funktion ""public: void __thiscall ic::Console::setWndPos(int,int)" (?setWndPos@Console@ic@@QAEXHH@Z)".
1>C:\Users\Daniel\Desktop\Projekte\X\Debug\X.exe : fatal error LNK1120: 3 nicht aufgelöste externe Verweise.kann ich mir wirklich nicht erklären
Mit freundlichen Grüßen,
Daniel
-
Dann kann ich mir das auch nicht erklären. Evtl. hilft SideWinder weiter.
-
mikey schrieb:
Dann kann ich mir das auch nicht erklären. Evtl. hilft SideWinder weiter.
Ok, aber trodzdem vielen dank, mikey
Hier ist noch was, einer hatte das gleiche Problem:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-131915-and-postdays-is-0-and-postorder-is-asc-and-start-is-110.htmlAber einfach so ein leeres Projekt zu starten(Win32-Konsolenanwendung?) funzt nicht ganz, da der Compiler wieder herummeckert, dass etwas fehlt und so . ^^
-
Dann kann ich dir nur eins sagen, wie SideWinder 2 Seiten zuvor:
Das SDK ist sicher eingebunden? Das kann in dem Fall nicht sein. Schau mal ob da noch irgendwas in der ReadMe der SDK-Install für die ExpressEdition steht was du übersehen hast...
Eine andere Möglichkeit fällt mir jetzt dazu wirklich nicht ein. Alles deutet darauf hin, dass das SDK nicht vollständig eingebunden wurde.
-
mikey schrieb:
Dann kann ich dir nur eins sagen, wie SideWinder 2 Seiten zuvor:
Das SDK ist sicher eingebunden? Das kann in dem Fall nicht sein. Schau mal ob da noch irgendwas in der ReadMe der SDK-Install für die ExpressEdition steht was du übersehen hast...
Eine andere Möglichkeit fällt mir jetzt dazu wirklich nicht ein. Alles deutet darauf hin, dass das SDK nicht vollständig eingebunden wurde.
Da fällt mir gerade ein,dass bei mir,statt 1033, 1031 steht:
Step 5: Generate and build a Win32 application to test your paths.
In Visual C++ Express, the Win32 Windows Application type is disabled in the Win32 Application Wizard. To enable that type, you need to edit the file AppSettings.htm file located in the folder “%ProgramFiles%\Microsoft Visual Studio 8\VC\VCWizards\AppWiz\Generic\Application\html*1033*\".Woher bekomme ich den Ordner 1031? bei mir scheint es ihn gar nicht zu geben..
-
Afaik ist das ein Fehler von Microsoft. Der Ordner hat eine andere Zahl, in der sich die Datei befindet. Sorry, hatte ich (und alle anderen hier) ganz vergessen. Sollte man in den FAQs deutlich darauf hinweisen!