Fehler bei DirectInput8Create()..warum?



  • Hallo leute!
    zunächst mal möchte ich euch bitten mich nicht zu flamen, ist schon ein weilchen her seitdem ich das letzte mal geproggt habe..bin euch aber sehr dankbar für konstruuktive kritik.

    nun mal zu meinem problem: ich wollte direct input in mein programm implementieren und scheitere leider schon an der erstellung des hauptinterfaces (<<-- richtige bezeichnung???)

    ich poste hier mal den quellcode meiner dateien.

    main.h

    #define DIRECTINPUT_VERSION 0x0800
    #include <windows.h>
    #include <dinput.h>
    
    HWND W_hwnd;
    HINSTANCE W_instance;
    WNDCLASSEX W_windowclass;
    const char name[]="Fenster";
    bool B_done = false;
    //_--------------------------------------------------------------
    //_--------------------------------------------------------------
    class input {
    
    public: input(HINSTANCE hInstance);
    		~input();
    		bool Initalisieren();
    
    private: LPDIRECTINPUT8 X_Input;
    		 bool b_init;
    		 HRESULT rval;
    		 HINSTANCE HI;
    
    };
    //_--------------------------------------------------------------
    input::input(HINSTANCE hInstance)
    {
     HI= hInstance;
     rval=0;
     X_Input = NULL;
     b_init = false;
     Initalisieren();
    }
    //_--------------------------------------------------------------
    input::~input()
    {
     if (X_Input!=NULL)
     {
    	 X_Input->Release();
    	 X_Input = NULL;
     }
    }
    //_--------------------------------------------------------------
    bool input::Initalisieren()
    {
     rval = DirectInput8Create(HI,DIRECTINPUT_VERSION,IID_IDirectInput8,(void**)X_Input,NULL);
    
    if(rval!=DI_OK)	
     { MessageBox(NULL,"Fehler beim erstellen des DInput Objektes!","Fehler 1!",0);
     	  return false;
    	}
    
     return true;
    }
    //_--------------------------------------------------------------
    

    main.cpp

    #define WIN32_LEAN_AND_MEAN
    #include "main.h"
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
    //----------------------------------------------------------------
    
    int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmd,int nShowCmd)
    {
     MSG message;
     W_instance = hInstance;
     W_windowclass.cbSize=sizeof(WNDCLASSEX);
     W_windowclass.cbClsExtra = 0;
     W_windowclass.cbWndExtra = 0;
     W_windowclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
     W_windowclass.hCursor = LoadCursor(NULL,IDC_ARROW);
     W_windowclass.hIcon = LoadIcon(NULL,IDI_APPLICATION);
     W_windowclass.hIconSm = LoadIcon(NULL,IDI_APPLICATION);
     W_windowclass.hInstance = hInstance;
     W_windowclass.lpfnWndProc = WndProc;
     W_windowclass.lpszClassName = name;
     W_windowclass.lpszMenuName = NULL;
     W_windowclass.style = CS_HREDRAW | CS_VREDRAW;
    
     if(!(RegisterClassEx(&W_windowclass)))
    	 return 0;
    
     W_hwnd = CreateWindowEx(
    						NULL,
    						name,
    						"Fenter1",
    						WS_VISIBLE | WS_POPUPWINDOW | WS_CAPTION,
    						100,
    						100,
    						400,
    						400,
    						NULL,
    						NULL,
    						hInstance,
    						NULL);
     if(!W_hwnd)
    	 return 0;
    
     ShowWindow(W_hwnd,nShowCmd);
     UpdateWindow(W_hwnd);
    
      input i(hInstance);
     i.~input();
    
     while(!B_done)
     {
    	if(PeekMessage(&message,NULL,0,0,PM_REMOVE))
    		{
    						   if(message.message==WM_QUIT)
    							   break;
    
    						   TranslateMessage(&message);
    						   DispatchMessage(&message);
    
    					   }
     }
    
     return (message.wParam);
    }
    
    //----------------------------------------------------------------
    
    LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch(message)
    
    	{
    	case WM_DESTROY:
    		{
    		B_done=true;
    		PostQuitMessage(0);
    
    		return 0; } break;
    
    	}
    	return (DefWindowProc(hWnd,message,wParam,lParam));
    }
    //----------------------------------------------------------------
    

    irgendwie ist rval immer -217..... wenn ich einen breakpoint setze um nachzusehen. das mit der übergabe von HI habe ich erst hiterher eingebaut vorher habe ich es mit GetModuleHandle(NULL) versucht, ohne erfolg. 🙄

    wäre euch sehr dankbar für eine hilfreiche antwort da meine motivation schon wieder anfängt zu sinken. 👎



  • Gugst du hier

    EDIT: Fuck, der der Link auf der Seite geht nicht.

    EDIT2: Da geht der Download. 🤡



  • mit dem SDK hab ichs ja schon versucht..vor langer zeit hatte ich DINPUT auch schon am laufen. in meinen alten codes habe ich auch gewühlt..aber irgendwie nix gefunden..hab halt keinen plan worans liegen könnte

    mfg christian

    EDIT: Danke für den 2. link werds mal nachschlagen

    EDIT2: hmm in diesem source code steht der aufruf so wie ich ihn auchschon mal ausprobiert hatte. liegts vielleicht am handle oder daran dass es sich in einer klasse befindet?? plz hlp



  • ich bin ein idiot! habe das "&" vor X_Input verpeilt. grrrrrrrr 😡 😡 😡 😡 😡


Log in to reply