WinAPI umwandeln
-
Schonmal vielen Dank an alle, dann ist ja doch noch nicht alle HOffnung verloren

werde mich nochmal an dem Projekt versuchen und dann Ergebnisse melden.
@Martin Richter: du meinst das bestehende Projekt oder? werd ich später mal probieren, aber wenn von a->b nicht geht, warum sollte es dann andersrum klappen

-
Hallo, habe jetzt eure Vorschläge umgesetzt und es funktioniert (fast) alles.
Ich bin mir zwar nicht sicher ob die Frage zu 100% in diese Forum gehört, aber ich möchte ungerne noch einen neuen Thread aufmachen...Hier mal ein Auszug des Programmes:
// ****************************************************************** // Globale Variablen LPDIRECTINPUT8 g_pDInput = NULL; // IDirectInput8-Objekt LPDIRECTINPUTDEVICE8 g_pJoystick = NULL; // Schnittstelle des Joysticks GUID JoystickGUID; // GUID des verwendeten Joysticks HINSTANCE hInstance = GetModuleHandle(NULL); BOOL CALLBACK EnumJoysticksCallback(LPCDIDEVICEINSTANCE ,void* ); bool InitJoystick(HWND ); bool DlgProc(); //HWND hDlg, unsigned int , WPARAM bool UpdateJoystickState(HWND ); HWND hDlg; unsigned int uiMsg; WPARAM WParam; // Windows-Hauptfunktion int main() { HWND hDlg; //HINSTANCE hInstance; // das IDirectInput8-Objekt wird mit der Funktion DirectInput8Create erstellt. if(FAILED(DirectInput8Create(hInstance, // Instanz 0x0800, // Version IID_IDirectInput8, // Schnittstellenversion (void**)(&g_pDInput), // Doppelzeiger auf Objekt NULL))) // nicht wichtig { printf("IDirectInput8-Objekt konnte nicht erstellt werden!"); getchar(); return 1; } printf("IDirectInput8-Objekt wurde angelegt!\n"); DlgProc(); } // ****************************************************************** // Dialogrückruffunktion bool DlgProc() { char eingabe; bool ende=false; do { fflush(stdin); printf("a. Initialisieren\n"); printf("b. Aktivieren\n"); printf("c. Joystick-Status\n"); printf("d. Initialisieren\n"); printf("e. Ende\n"); printf("Auswahl : "); scanf("%c",&eingabe); //switch(uiMsg) switch(eingabe) { //case WM_INITDIALOG: case 'a': // Icon setzen SetClassLong(hDlg, GCL_HICON, (LONG)(LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON1)))); // Den Joystick initialisieren! if(InitJoystick(hDlg)) { printf("Joystick konnte nicht initialisiert werden!\n"); EndDialog(hDlg, 1); } // Timer einstellen, so dass alle 0.05 Sekunden eine WM_TIMER- // Nachricht verschickt wird. Dort wird dann der Zustand des // Joysticks aktualisiert. SetTimer(hDlg, 0, 50, NULL); printf("Joystick wurde Initialisiert\n"); break; //case WM_ACTIVATE: case 'b': if(LOWORD(WParam) != WA_INACTIVE) { // Das Fenster wurde gerade aktiv. // Direkten Zugriff aktivieren! if(g_pJoystick != NULL) g_pJoystick->Acquire(); } printf("Joystick wurde Aktiviert\n"); break; //case WM_TIMER: case 'c': // Status des Joysticks aktualisieren und anzeigen UpdateJoystickState(hDlg); break; //case WM_CLOSE: case 'd': EndDialog(hDlg, 0); break; /* case WM_COMMAND: switch(LOWORD(WParam)) { case IDC_OK: // Dialog beenden, wenn OK angeklickt wurde EndDialog(hDlg, 0); break; } */ case 'e': printf("beenden...\n"); ende=true; break; default: printf("Falsche Eingabe\n"); } }while(ende==false); //case WM_DESTROY: // Das Dialogfenster wird geschlossen. Aufräumarbeiten erledigen! KillTimer(hDlg, 0); if(g_pDInput != NULL) g_pDInput->Release(); if(g_pJoystick != NULL) { g_pJoystick->Unacquire(); g_pJoystick->Release(); } return TRUE; }Ich Rufe nun immer die DLG Proc auf und initialisiere den Joystick,aktiviere ihn....Dies klappt auch alles ohne Fehler.
Das Problem ist jetzt mit der Abfrage des eigentlichen Joystickstatus :bool UpdateJoystickState(HWND hDlg) { DIJOYSTATE2 JoystickState; // Status des Joysticks char acButtonsText[256]; // Text für die gedrückten Knöpfe HRESULT r; printf("Jetzt Daten abfragen.\n"); //******* WHILE - ANFANG ******************** do { // Daten abfragen r = g_pJoystick->Poll(); if(r == DIERR_INPUTLOST) { // Zugriff verloren - erneut versuchen g_pJoystick->Acquire(); } if(FAILED(r)) { // Abfrage hat nicht funktioniert! // Wahrscheinlich ist das Fenster gerade nicht aktiv. //printf("Fehler beim Abfragen der Eingabedaten!"); //return FALSE; } // Zustand abfragen g_pJoystick->GetDeviceState(sizeof(DIJOYSTATE2), &JoystickState); // Anzeigen generieren if ( ((JoystickState.lX)==0) && ((JoystickState.lY)==0) ) { printf("Beides Null.\n"); } else if ( ((JoystickState.lX)>60000) && ((JoystickState.lY)>60000) ) { printf("Beides ueber 60000"); } }while(1); return TRUE; }Habe es jetzt probeweise in eine Endlosschleife gepackt um zu sehen ob noch Werte ankommen bzw. die beiden Abfragen erfüllt werden. Leider ist dies momentan nicht der Fall.
Kann mir hier vielleicht jemand einen Tipp geben? Dachte erst er hätte Probleme mit g_pJoystick und dessen Funktionen, aber diese kann ich alle auswählen.
Vielen Dank nochmals.
-
Warum hast Du keine Fehlerbehandlung?
Was liefert denn Poll als Ergebnis?
Was liefert GetDeviceState als Ergebnis?Wie wäre es wenn Du erstmal selber die minimale Fehlersuche machst? :xmas1:
-
Hallo,
habe durch deine Hinweise meine Fehler schon gefunden. Hatte aber nur Bedingt mit dem bestehendem Quellcode zu tun.
if(LOWORD(WParam) != WA_INACTIVE) { // Das Fenster wurde gerade aktiv. // Direkten Zugriff aktivieren! if(g_pJoystick != NULL) g_pJoystick->Acquire(); } printf("Joystick wurde Aktiviert\n");Das Acquire wurde nicht ausgeführt...nun gehts

Inwieweit würdest du denn in so einem Beispielprogramm eine Fehlerbehandlung machen? Ist ja jetzt wirklich nur ein Programm zum "rumspielen" und ausprobieren der Joystick-Funktionen.
Aber trotzdem vielen Dank für den "Arschtritt"

-
rückgabewerte nicht prüfen und sich wundern, wenn nix funktioniert ist einfach immer wieder ein highlight in diesem forum. warum rückgabewerte prüfen, hauptsache es kompiliert, gelle?
-
gaaaaaaaaaaaaaaaaanz ruhig Durchatmen

Ist wohl noch kein Programmierkünstler vom Himmel gefallen...oder vllt doch? Bist du der Auserwählte?SORRY für OFFTOPIC, aber musste gerade sein.....
-
so was lernt man in jedem n00b buch auf seite 3.
-
Ich glaube nicht, dass in den samples umsonst soviel Quellcode steht...

Ich habe die auch noch net ganz verstanden drum kann ich dir nicht genau sagen was alles anders ist, schau sie dir lieber mal an.
-
@DarkShadow44
Sorry, aber ich kann deine Aussage gerade nicht ganz interpretieren...
-
Dein code siehet SEHR kurz aus...
Deshalb glaube, ich dass du dir die samples amn anschauen solltest, auch wegen Fehler-Handling
