Tastatur abfrage



  • Hi

    Ich habe ein Problem mit der Tastaturabfrage. Ich habe das Beispiel aus dem Buch jetzt lerne ich DirectX9 und Visual Studio C++.
    Nun zu meinem Problem:
    Ich habe die Tastatur initualisiert. (Dies funktioniert auch)

    bool buffer[256];
    if(FAILED(m_lpDevice->GetDeviceState(sizeof(buffer),(LPVOID)&buffer)))
    {
    m_lpDIDevice->Acquire();
    return 0;
    }
    

    Sobald er die Funktion GetDeviceState..... aufruft kommt folgende Fehlermeldung und die Applikation bleibt hängen

    Unbehandelte Ausnahem in xxx.exe 0x0000005: Access Violation
    

    Kann jemand sagen, woran das Problem liegen könnte?
    Es funktioniert in einer anderen Applikation (Habe die Klasse kopiert)
    Liegt es daran, dass ich eine "Fullscreen-Anwendung" habe???

    Was muss ich noch alles posten, damit mir jemand helfen kann?
    (sind 4 Klassen, wäre von mir aus gesehen sinnlos diese alle zu Posten...)

    Bitte helft mir....



  • Wenn ich nicht Debugge, schliesst sich die Anwendung gleich nach dem Start wieder automatisch...
    (Hängt wohl auch mit diesem Problem zusammen...)

    Bitte helft mir!



  • Ich kann nur hoffen, dass das nicht so in deinem Quelltext steht... falls doch, dann ersetz mal das 'bool' vor dem buffer durch ein 'char' 😉 ...

    Hier nochmal zur verdeutlichung (so sollte der Aufruf nach der Änderung aussehen):

    g_pKeyboard->GetDeviceState(sizeof(buffer),&buffer);
    

    cya WirrWar2850.



  • Ich hatte zuerst char, aber dies funktioniert auch nicht!
    woran könnte es sonst liegen?



  • // Keyboarddaten abfragen
    hr=g_pKeyboard->GetDeviceState(sizeof(buffer),&buffer);
    
    if(FAILED(hr)) 
    {
            // Keyboard reakquirieren falls der Zugriff verloren ging
            hr = g_pKeyboard->Acquire();
            while(hr == DIERR_INPUTLOST) 
            hr = g_pKeyboard->Acquire();
    }
    

    So sieht das mit der Abfrage bei mir aus... wobei buffer ein char Array ist...

    Und so sieht die Initalisierung aus... vielleicht haste da ja irgend was falsch gemacht...

    HRESULT InitKeyboard(HWND handle)
    {
        // Keyboard-Objekt erzeugen
        g_pDI->CreateDevice( GUID_SysKeyboard, &g_pKeyboard, NULL );
    
        // Message Box anzeigen, wenn Tastatur nicht initialisiert
        // werden konnte
        if(NULL == g_pKeyboard)
        {
            MessageBox(handle, "keine Tastatur gefunden",
                       "", MB_ICONERROR | MB_OK);
            return S_FALSE;
        }
    
        // Datenformat festlegen
        g_pKeyboard->SetDataFormat( &c_dfDIKeyboard ); 
    
        // festlegen, wie DirectInput Zugriff auf das Gerät erhält
        g_pKeyboard->SetCooperativeLevel(handle,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE); 
    
        // akquirieren des Gerätes
        g_pKeyboard->Acquire();
    
        return S_OK;
    
    }
    

    Ich hoffe, das hilft 💡 ...
    cya WirrWar2850.



  • Ich habe es genau gleich....

    aber bei mir stürzt die App. in folgender Zeile ab:

    hr=g_pKeyboard->GetDeviceState(sizeof(buffer),&buffer);
    

    liegt es daran, dass g_pKeyboard im *.h-File definiert ist???
    Hast du eine E-Mail-Adresse, damit ich dir das Projekt mal schicken kann, damit du es besser sehen kannst?



  • Ja: LinkinPark2850@aol.com
    Hast du ICQ???
    Wenn ja, dann meld dich mal unter 291168990 ...

    cya WirrWar2850.



  • Ok, du hast folgenden Fehler gemacht:
    Du hast bei jeder Abfrage der Benutzereingaben in deiner Funktion ManageInput eine neue DirectInput Instanz angelegt... du solltest eine global (oder besser wäre eigentlich zu einer Klasse gehörend) anlegen und diese dann immer benutzen 😉 ...

    Also nicht von DX erwarten, dass es aus einer nicht initalisierten Instanz die Benutzereingaben liest... du hast alles richtig initalisiert, aber nicht das genutzt, was du initalisiert hast 🙄 ...

    cya WirrWar2850.



  • LOL.

    Bye, TGGC (Wähle deine Helden)


Anmelden zum Antworten