Problem bei Joystickabfrage



  • Hallo,

    ich versuche zur Zeit einen Joystick abzufragen.
    Ich benutze hierbei eine Win32-Konsolenanwendung (da ich auf ein bestehendes Projekt aufbauen muss.)

    Ich habe nun ein "Versuchs"-Projekt indem ich mich nur um das Auselesen gekümmert habe, welches auch nun funktioniert. Es wird Text ausgegeben in welche Richtung sich der Joystick bewegt. Nun wollte ich das ganze in das bestehendes Projekt einbinden. Leider funktioniert schon das Erstellen des DirectInput8-Objektes nicht mehr. Hier mal der Code :

    bool KI::InitJoystick()
    {
    HRESULT hResult;
    	hResult = DirectInput8Create(hInstance, 0x0800,	IID_IDirectInput8, (void**)(&g_pDInput), NULL);
    //Zur Abfrage eingefügt
    	if(hResult == DIERR_OLDDIRECTINPUTVERSION)
        {
            printf("OLDDIRECTINPUTVERSION");
        }
        else if(hResult == DIERR_OUTOFMEMORY)
        {
            printf("OUTOFMEMORY");
        }
        else if(hResult == DIERR_BETADIRECTINPUTVERSION)
        {
            printf("BETADIRECTINPUTVERSION");
        }
        else if(hResult == DI_OK)
        {
            printf("OK");
        }
    	else if(hResult == DIERR_INVALIDPARAM)
        {
            printf("INVALIDPARAM");
        }
        else
        {
            printf("Nix gefunden...");
        }
    

    Diese Abfrage gibt mir nun "INVALIDPARAM" aus. Mir ist schon klar, dass dies auf einen falschen Parameter hindeutet...aber wo 😕

    Diese Variablen habe ich global definiert bzw. die vorahnden Bibliotheken:

    #include "KI.h"
    #include <initguid.h>
    #include <DInput.h>
    #include <stdio.h>
    #include "windows.h"
    
    // Globale Variablen
    LPDIRECTINPUT8			g_pDInput;	// IDirectInput8-Objekt
    LPDIRECTINPUTDEVICE8	g_pJoystick = NULL;	// Schnittstelle des Joysticks
    GUID					JoystickGUID;		// GUID des verwendeten Joysticks
    HINSTANCE hInstance = GetModuleHandle(NULL);
    
    HWND hDlg;
    

    Unter den Projekteigenschaften habe ich noch folgende Libs gelinkt :
    dinput8.lib dxguid.lib kernel32.lib user32.lib

    Habe ich irgendetwas elementares vergessen???
    Vielen Dank schonmal!



  • hResult = DirectInput8Create(GetModuleHandle( NULL ), 0x0800,    IID_IDirectInput8, (void**)(&g_pDInput), NULL);
    

    Das geht bei mir. 🙂



  • Darf ich mal fragen wieso ich immer überall im Spiele/Grafik Forum so ellen lange IF-ELSE sachen seche? Hat das nen Grund? Y kein switch?



  • @Dark Shadow44
    Vielen Dank, funktioniert jetzt wunderbar. Kannst du mir vllt noch erklären warum so und nicht anders 😕

    @Priest
    Keine Ahnung, bin ja auch kein "Spieleprogrammierer" 🙂 Interessiere mich (momentan) nur für Steuerung. Habe solch eine Abfrage in einem Forum entdeckt und zu meinenen Zwecken modifiziert.



  • PRIEST schrieb:

    Darf ich mal fragen wieso ich immer überall im Spiele/Grafik Forum so ellen lange IF-ELSE sachen seche? Hat das nen Grund? Y kein switch?

    Naja da kann man noch viel aussetzen wenn man mal anfängt...

    Wieso nicht überhaupt in eine Funktion auslagern?
    Und wieso mit hr == auf DI_OK testen, und nicht SUCCEEDED(hr) nehmen?
    Und wieso nicht als erstes auf SUCCEEDED(hr) testen und dann erst auf Fehler?
    usw.


Anmelden zum Antworten