Zweites Konsolenfenster



  • 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,
    Daniel

    EDIT:

    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,
    Daniel

    P.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.html

    Aber 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!



  • ey wo find isch de schritt nr. 3?
    so schauts us:

    Add the paths to the appropriate subsection:

    Executable files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin 
    Include files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include 
    Library files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Lib
    

    da gibets kein extramenü in visual c++ ee 🙄
    wo find i des wo man des istelle cha?



  • xyz2 schrieb:

    ey wo find isch de schritt nr. 3?
    so schauts us:

    Add the paths to the appropriate subsection:

    Executable files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin 
    Include files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include 
    Library files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Lib
    

    da gibets kein extramenü in visual c++ ee 🙄
    wo find i des wo man des istelle cha?

    ey watt willste? hu?
    --------------------
    ye twat hstae rovß
    --------------------
    Kannst du auch normal sagen was du suchst?



  • oh sry...

    Executable files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin
    Include files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Include
    Library files: C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Lib

    wo find ich des zum einstellen?



  • Hab jetzt nicht den ganzen Thread verfolgt, wenn noch Probleme bestehen, dann bitte melden.

    Diese Pfade kannst du unter Extras -> Optionen -> Projekte und Projektmappen -> VC++-Verzeichnisse

    Dann wählst du aus der ComboBox rechts oben einmal "Ausführbare Dateien", einmal "Includedateien" und einmal "Bibliotheksdateien" aus und addest jeweils den von dir genannten Pfad (und schaust das er ganz oben in der Liste steht).

    MfG SideWinder



  • Hallo Side,

    Hab jetzt nicht den ganzen Thread verfolgt, wenn noch Probleme bestehen, dann bitte melden.

    Guck dir mal die letzten zwei Seiten des Threads an, bitte 🙂



  • Hab die Improved Console erstmals weggelassen 🙂
    Aber das Problem besteht immer noch ^^

    Daniel



  • Moin,

    Muss dein Proramm denn unbending eine Konsolenanwendung sein?
    Wenn du ein Spiel programmierst, wäre es einfacher die MFC zu benutzen!
    (Oder die API - je nach geschmack,..)

    Da kannst du die Fensterkontrolle selbst übernehmen.
    Außerdem kannst du deinem Gamer auch Butten zum Anklicken bieten (kommt immer gut).

    MfG David


Anmelden zum Antworten