DirectInput8 kann nicht initalisiert werden :(
-
Hi!
"Ich hätte gerne ein Problem.". Ne, Schmarn, ich hab schon eins:
void mcInput::Init(HINSTANCE hInstance,HWND hWnd,int iDevices) { // DirectInput-Object anlegen if(FAILED(DirectInput8Create(hInstance,DIRECTINPUT_VERSION,IID_IDirectInput8,(void **) &m_lpDI,0))) { throw TEXT("Konnte DirectInput nicht initialisieren!"); } // Geräte initialisieren if(iDevices & KEYBOARD) { InitKeyboard(hWnd); } if(iDevices & MOUSE) { InitMouse(hWnd); } }
Wenn ich das aufrufe, kommt immer "Konnte DirectInput nicht initialisieren!". Jetzt weiß ich wenigstens schon mal, dass meine Exceptions funktionieren ;). Ich frag mich nur, warum das nicht funktionieren will. Hab ich da irgendwas falsch geschrieben oder so?
thx & cu
-
Kleiner Denkanstoß :
Fast alle DirectX Funktionen returnen einen HRESULT.
Das tolle daran ist,dass er dir meist eine ziemlich genaue Fehlerbeschreibung gibt...[ Dieser Beitrag wurde am 06.01.2003 um 19:14 Uhr von Headhunter editiert. ]
-
Oder schalt mal in der Systemsteuerung DirectInput auf Debug Runtime um, dreh Debug Output Level ganz hoch, alles andere auch an und dann im Debugger laufen lassen. Dann meldet dir DirectInput im Debugger viele Infos und alle Warnungen und Fehler.
ChrisM
-
Oder versuch mal als letzten Parameter von DirectInput8Create statt 0 mal NULL anzugeben, so wie es in der Doku steht!
-
Hmm... jetzt müsste man noch wissen, wie man so nen 'HRESULT' auswertet, was?
Aber den Rest kann ich jetzt schon ausprobieren *freu*.
thx & cu
-
HRESULT hr = DirectInput8Create(...);
switch(hr)
{
case DI_OK:
...
break;
case DIERR_BETADIRECTINPUTVERSION:
...
break;
case DIERR_INVALIDPARAM:
...
break;
case DIERR_OLDDIRECTINPUTVERSION:
...
break;
case DIERR_OUTOFMEMORY:
...
break;
}Da war ich wohl zu langsam
[ Dieser Beitrag wurde am 06.01.2003 um 19:49 Uhr von flenders editiert. ]
-
So hab ich's jetzt:
HRESULT hResult = DirectInput8Create(hInstance,DIRECTINPUT_VERSION,IID_IDirectInput8,(void **) &m_lpDI,0); if(hResult == DIERR_OLDDIRECTINPUTVERSION) { throw TEXT("OLDDIRECTINPUTVERSION"); } else if(hResult == DIERR_INVALIDPARAM) { throw TEXT("INVALIDPARAM"); } else if(hResult == DIERR_OUTOFMEMORY) { throw TEXT("OUTOFMEMORY"); } else if(hResult == DIERR_BETADIRECTINPUTVERSION) { throw TEXT("BETADIRECTINPUTVERSION"); } else { throw TEXT("Nix gefunden..."); }
Es wird aber immer "Nix gefunden..." ausgegeben...
@ChrisM: Funktioniert bei mir nicht, ich kann da nix umstellen.
@flenders: Hat auch nicht funktioniert.cya
-
Teste mal noch auf DI_OK!
-
HRESULT hResult = DirectInput8Create(hInstance,DIRECTINPUT_VERSION,IID_IDirectInput8,(void **) &m_lpDI,0); if(hResult == DIERR_OLDDIRECTINPUTVERSION) { throw TEXT("OLDDIRECTINPUTVERSION"); } else if(hResult == DIERR_INVALIDPARAM) { throw TEXT("INVALIDPARAM"); } else if(hResult == DIERR_OUTOFMEMORY) { throw TEXT("OUTOFMEMORY"); } else if(hResult == DIERR_BETADIRECTINPUTVERSION) { throw TEXT("BETADIRECTINPUTVERSION"); } else if(hResult == DI_OK) { throw TEXT("OK"); } else { throw TEXT("Nix gefunden..."); }
Auch "Nix gefunden...". Das ist ja dann ein Fehler, den es gar nicht gibt, oder was ;)? In meiner DX-Doku stehen nur die oben genannten Möglichkeiten für HRESULT bei DirectInput8Create...
cya
-
Ich meine, vieleicht wenn du willst ich habe ne klasse für DirectInput geschrieben, allerdings mit Version 7. läuft aber natürlich auch mit 8. Wenn willst gebe ich sie dir mal.
-
@xyz44: Ne, brauchst du nicht. Ich möchte eigentlich nur wissen, warum das nicht geht :).
cya
-
Hast du bei der Version schon mal NULL statt 0 ausprobiert? (man kann ja nie wissen )
-
Das geht auch nicht... :heul:
thx & cya
-
Ist vielleich dein hInstance in der Funktion nicht gültig, oder sowas?
Hast du schonmal probiert die Funktion aus deiner Memberfunktion rauszunehmen und direkt in WinMain zu setzen?[ Dieser Beitrag wurde am 06.01.2003 um 20:41 Uhr von flenders editiert. ]
-
Funktionieren denn die DirectInput-Beispielprogramme aus dem DirectX-SDK?
-
@flenders: hInstance ist gültig, bin da mit'm Debugger schon mal drübergefahren.
@ThomasRiker: Einen Moment bitte, ich probier's mal aus....cya
-
Die Beispiele aus dem SDK funktionieren, ich hab's dann auch mal GetModuleHandle(0) probiert, auch mit GetModuleHandle(NULL), hat aber auch nicht funktioniert, liegt also nicht an der Instance.
thx & cya
-
Du hast aber nicht DirectX 9.0 draufgemacht, oder?
-
Nein, bin noch ein treuer Anhänger von DirectX 8.
cya
-
Hat noch irgendjemand irgendeine Idee?
cya