[DirectX] Fehler während Tutorial



  • Hallo,

    also um mein Problem eben dazulegen:
    Ich habe mir auf unserer Bibliothek ein Buch ausgeliehen welches heißt "3D-Spiele mit C++ und DirectX" was in 21 Tagen geschehn soll.

    Okay, also ich habe da das erste Programm programmiert, welches eine Messagebox ausgibt, nichts Weltbewegendes, was auch einwandfrei funktioniert, aber sobald es um die Game Shell geht, also ein schwarzes Fenster, bekomme ich immer einen Fehler.

    Kurioserweise funktioniert das selbe Codebeispiel (welches auf einer Extra-CD beiligt) ohne Probleme, aber wenn ich den Code in mein Programm kompiere, meinetwegen auch in ein neues Projekt, bekomme ich wieder diesen Fehler, obwohl vorher kein Fehler gefunden wurde.

    Vielleicht könnt ihr mir da helfen, als Anfänger ist es schwierig rauszufinden, was nun genau das Problem ist ...

    Hier das Programm:
    (unter dem Code stehen die Fehler, ich habe im Quelltext die Zeilen mit einen Kommentar versehen, wo der Fehler ist!)

    //-----------------------------------------------------------------------------
    // DEFINES 
    //-----------------------------------------------------------------------------
    
    #define WINDOW_CLASS_NAME "Game Shell Window"
    #define WIN32_LEAN_AND_MEAN  
    
    //-----------------------------------------------------------------------------
    // INCLUDES
    //-----------------------------------------------------------------------------
    
    #include <windows.h>  
    
    //-----------------------------------------------------------------------------
    // MACROS 
    //-----------------------------------------------------------------------------
    
    #define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
    #define KEYUP(vk_code)   ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
    
    //-----------------------------------------------------------------------------
    // GLOBALS 
    //-----------------------------------------------------------------------------
    
    HWND      main_window_handle = NULL; 
    HINSTANCE hinstance_app      = NULL; 
    
    //-----------------------------------------------------------------------------
    // Funktionsprototypen für den Spielablauf
    //-----------------------------------------------------------------------------
    
    void Game_Shutdown(void);
    void Game_Init(void);
    void Game_Main(void);
    
    //-----------------------------------------------------------------------------
    // Funktionsdefinitionen
    //-----------------------------------------------------------------------------
    
    LRESULT CALLBACK WindowProc(HWND hwnd, 
    						    UINT msg, 
                                WPARAM wparam, 
                                LPARAM lparam)
    {
    
        PAINTSTRUCT		ps;		
        HDC				hdc;	
    
        // Nachrichtenverarbeitung
        switch(msg)
    	{       
    	    case WM_CREATE: 
            {
    		    return(0);
    		} 
            break;
    
    	    case WM_PAINT: 
    		{		   
       	        hdc = BeginPaint(hwnd,&ps);	           
                EndPaint(hwnd,&ps);          
    		    return(0);
       		}
            break;
    
    	    case WM_DESTROY: 
    		{		   
    		    PostQuitMessage(0);          
    		    return(0);
    		} 
            break;
    
    	    default:
            break;
    
        } 
        return (DefWindowProc(hwnd, msg, wparam, lparam));
    
    } 
    
    ///////////////////////////////////////////////////////////////////////////////
    
    int WINAPI WinMain(	HINSTANCE hinstance,
    					HINSTANCE hprevinstance,
    					LPSTR lpcmdline,
    					int ncmdshow)
    {
    
        WNDCLASSEX winclass; 
        HWND	   hwnd;	 
        MSG		   msg;		 
    
        // Fenstereigenschaften festlegen:
        winclass.cbSize         = sizeof(WNDCLASSEX);
        winclass.style			= CS_HREDRAW | CS_VREDRAW ;   
        winclass.lpfnWndProc	= WindowProc;
        winclass.cbClsExtra		= 0;
        winclass.cbWndExtra		= 0;
        winclass.hInstance		= hinstance;
        winclass.hIcon			= LoadIcon(NULL, IDI_APPLICATION);
        winclass.hCursor		= LoadCursor(NULL, IDC_ARROW); 
        winclass.hbrBackground	= (HBRUSH)GetStockObject(BLACK_BRUSH);
        winclass.lpszMenuName	= NULL;
        winclass.lpszClassName	= WINDOW_CLASS_NAME;   // Fehler 1
        winclass.hIconSm        = LoadIcon(NULL, IDI_APPLICATION);
    
        hinstance_app = hinstance;
    
        if (!RegisterClassEx(&winclass))
    	    return(0);
    
        if (!(hwnd = CreateWindowEx(NULL,                 
                                    WINDOW_CLASS_NAME,     
    						        "My Game Shell",
    						        WS_OVERLAPPEDWINDOW | WS_VISIBLE ,                                
    					 	        0,0,	  
    						        800,600,  
    						        NULL,	  
    						        NULL,	  
    						        hinstance,
    						        NULL)))	  //Fehler 2
        return(0);
    
        main_window_handle = hwnd;
    
        Game_Init();
    
        // Nachrichtenweiterleitung
        while(TRUE)
    	{
    
    	    if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
    	    { 
    	        if (msg.message == WM_QUIT)
                   break;
    
                TranslateMessage(&msg);	       
    	        DispatchMessage(&msg);
    	    } 
            Game_Main();       
        } 
    
        Game_Shutdown();
    
        return(msg.wParam);
    
    }
    
    Fehler:
    Fehler	1	error C2440: '=': 'const char [18]' kann nicht in 'LPCWSTR' konvertiert werden	Zeile 106	002_dxIn21T_gameShellApplication
    
    Fehler	2	error C2664: 'CreateWindowExW': Konvertierung des Parameters 2 von 'const char [18]' in 'LPCWSTR' nicht möglich	Zeile 125	002_dxIn21T_gameShellApplication
    

    Ich habe in einem anderen Tutorial gelesen, dass man vor bestimmte String's ein L schreibt (wie ganz oben wo man den Klassennamen definiert, dann verschwiendet der erste Fehler, was das nun genau bedeutet weiss ich auch nicht.
    Der zweite Fehler bleibt allerdings ...

    Vielleicht hat von euch jemand eine Idee.
    Meine Programmierumgebung ist Visual Studio, weiss auch nicht ob dass das Beste für DirectX ist.

    Liebe Grüße,
    SkiD.



  • Pack deine Zeichenkette in TEXT rein...

    TEXT("Blablubb")
    


  • Hallo,

    danke so funkioniert das!
    Kannst du mir denn auch sagen, warum das vorher nicht funktioniert hat und warum das gleiche Beispiel auf der CD so funktioniet, wie es oben steht ?

    Liebe Grüße,
    SkiD.

    P.s. Was ich auch gerne wissen möchte ist, was der unterschied zwischen "Test" und L"Test ist ?



  • Hatte damals auch keine Ahnung von diesen Sachen... guck mal rein, lohnt sich:

    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1192331-and-highlight-is-.html#1192331



  • Ich danke dir!
    Ich werde mir diesen besagten Artikel durchlesen, in der Hoffnung, dass ich beim nächstenmal gleich weiss worum es geht und entsprechend reagieren kann 😉

    Danke nochmals!

    SkiD.


Anmelden zum Antworten