Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

1

19.08.2006, 16:30

[Direct Input] - GetDeviceState schlägt immer fehl!

Langsam fange ich an mir zu zweifeln ... Ich habe schon in Davids Buch nachgesehen, in der MSDN und meine MSN Kontaktliste genervt. Ich bekomm einfach keinen Keyboardinput. Mir wird stets ein "DIERR_INPUTLOST" um die Ohren gehauen. Ich geb einfach mal meinen Code raus, vllt findet wer ja was ... bitte :( Fehlschlag findet sich ganz unten beim "Testpoll" bzw GetDeviceState. Die MessageBox wird immer ausgegeben. Hab auch schonmal testweise DISCL_BACKGROUND gesetzt, war leider nix :(

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// Wir schnappen uns das Systemkeyboard

    if(FAILED(mDInput->CreateDevice(GUID_SysKeyboard, &mKeyboard, NULL)))
    {
        // Fehler, wir kloppen mal Log raus und geben false zurück

        Ogre::LogManager::getSingleton().getDefaultLog()->logMessage("DirectInput Device - Error Creating Keyboard!", Ogre::LML_CRITICAL);
        return (false);
    }

    // Setzen wir mal das gewünschte Datenformat

    if(FAILED(mKeyboard->SetDataFormat(&c_dfDIKeyboard)))
    {
        Ogre::LogManager::getSingleton().getDefaultLog()->logMessage("DirectInput Device - Could not set Keyboard Dataformat!", Ogre::LML_CRITICAL);
        return (false);
    }

    // Wir setzen die Kooperationsebene

    if(FAILED(mKeyboard->SetCooperativeLevel(theOgreInst->mWin->returnWindowHandle(),
                                             DISCL_NONEXCLUSIVE | DISCL_FOREGROUND)))
    {
        Ogre::LogManager::getSingleton().getDefaultLog()->logMessage("DirectInput Device - Could not set Keyboard Cooperation Level!", Ogre::LML_CRITICAL);
        return (false);
    }

    // Und dann starten wir mal den ersten acquire Versuch

    if(FAILED(mKeyboard->Acquire()))
    {
        Ogre::LogManager::getSingleton().getDefaultLog()->logMessage("DirectInput Device - Error Acquiring Keyboard!", Ogre::LML_CRITICAL);
        return (false);
    }
    else
    {
        Ogre::LogManager::getSingleton().getDefaultLog()->logMessage("DirectInput Device - Keyboard Acquired!", Ogre::LML_CRITICAL);
    }

    // Mhhh, machen wir mal einen realen Test ...

    // Unser Datenset für die max 256 Tasten

    BYTE aKey[256];
    memset(aKey, 0, sizeof(BYTE) * 256);

    // Fragen wir mal den Zustand ab, wenn das fehlschlägt sind wir wohl nicht im Vordergrund

    HRESULT r = mKeyboard->GetDeviceState(sizeof(aKey), aKey);

    if(r = DIERR_INPUTLOST)
    {
        mKeyboard->Acquire();
        ::MessageBoxW(theOgreInst->mWin->returnWindowHandle(),L"Error making testpoll!", L"Error",NULL);
        return (FIX::INPUT_KEYBOARDLOST);
    }

    // Damit hat das Keyboard alle Stresstests bestanden, das geben wir auch freudig aus

    Ogre::LogManager::getSingleton().getDefaultLog()->logMessage("DirectInput Device - ++ Keyboard ready! ++", Ogre::LML_CRITICAL);
    return (true);

Kasenoru

Frischling

Beiträge: 79

Beruf: Softwareentwickler

  • Private Nachricht senden

2

21.08.2006, 04:57

Naja, ich schätze mal du hast dein Problem inzwischen schon selber gefunden, aber ich antworte einfach trotzdem mal.

Sie dir deinen Code mal an, du hast eine C++ Grundlage missachtet ;)

MFG

Kasenoru

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

3

21.08.2006, 17:17

Um ehrlich zu sein habe ich noch nix gefunden ... Aber dann scheint der Fehler ja verdammt dumm zu sein, mal sehen ob mir das hilft ^^

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

4

21.08.2006, 17:38

Zitat

|\0_0/| Das Marcus sagt:
NEEEEEEEIN
|\0_0/| Das Marcus sagt:
NEIN
|\0_0/| Das Marcus sagt:
nEIN
Riddick sagt:
NEIN!!!
|\0_0/| Das Marcus sagt:
NAAAAAAAIIIIIN
Riddick sagt:
DAS GIBTS NICH
Riddick sagt:
ARGGGGHHHHHHHH
Riddick sagt:
SO BLIND!!!!!!!!!!!!!!!

Live von gerade ebend ausm Chat ^^
Ich btw Marcus, er btw DarkRaider

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

22.08.2006, 10:00

Dann sag jetzt auch, woran es lag ;)

Anonymous

unregistriert

6

22.08.2006, 10:39

Re: [Direct Input] - GetDeviceState schlägt immer fehl!

C-/C++-Quelltext

1
2
3
4
5
6
    if(r = DIERR_INPUTLOST)
    {
        mKeyboard->Acquire();
        ::MessageBoxW(theOgreInst->mWin->returnWindowHandle(),L"Error making testpoll!", L"Error",NULL);
        return (FIX::INPUT_KEYBOARDLOST);
    }


Guck dir diese If Abfrage mal gaaaaaanz genau an. Gurki und ich hängen
da Tagelang vor dem Fehler und kommen nicht drauf und dann ganz
plötzlich postet der mir die If Abfrage... Boah sind wir da durchgedreht ^^

DarkFitzi

Alter Hase

Beiträge: 608

Wohnort: Eisenberg, Thüringen

Beruf: Schüler, 10te Klasse

  • Private Nachricht senden

7

22.08.2006, 11:02

wie geil is das denn :lol: :lol:
der gute alte I$tg|_€i(|-| fehler ^^
Ich würde die Welt gern verbessern, doch Gott gibt mir den Sourcecode nicht! :-(

Das Gurke

Community-Fossil

  • »Das Gurke« ist der Autor dieses Themas

Beiträge: 1 996

Wohnort: Pinneberg

Beruf: Schüler

  • Private Nachricht senden

8

22.08.2006, 13:27

Geil, ihr beide scheint das ja auch übersehen zu haben ^^ Herrlich *g* Glaube ich kann mich da in 10 Jahren noch drüber amüsieren.

Nox

Supermoderator

Beiträge: 5 272

Beruf: Student

  • Private Nachricht senden

9

23.08.2006, 04:38

Bei sowas hilft debuggen :roll:
Eine Funktion, die wir leider nicht auf die Ferne einsetzen können :D
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Werbeanzeige