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)