Entwickler-Ecke

Multimedia / Grafik - directinput -joystick


doug - Di 26.07.05 09:17
Titel: directinput -joystick
hi,

ich wuerde gerne mit delphi die directinput schnittstelle ansprechen, leider habe ich einige probleme was die joystick abfrage angeht.

Wie kann ich den joysick richtig einrichten und die knoepfe abfragen. Ich bekomme schon beim enumerieren der joysticks probleme, weil ich nicht weiss wie ich die entsprechenden codes schreiben muss.

Ich habe versucht mir anhand von den msdn sachen etwas zurecht zu striken, leider sind die sachen alle mit c++ gemacht und damit tue ich micht doch noch recht schwer.

Ich benutze uebrigens die neusten dx headers(von clootie) sprich, dx9(dxinput8).

Google spuckt da leider nicht sehr viel aus, was im zusammenhang mit delphi steht. Fuer ein paar code snipets/links o.ae. was mir unter die arme greifen koennte bin ich sehr dankbar.

doug


maxk - Di 26.07.05 13:47

Hallo und :welcome: im DF!
Bitte versuche es demnächst mal mit Forensuche: Suche in: Delphi-Forum, Delphi-Library "JOYSTICK"
Vielleicht hilft dir auch der Eintrag in unseren FAQ: Suche in: Delphi-Library "JOYSTICK"

Gruß,
maxk


doug - Di 26.07.05 15:33

hi,

die suche hat mir leider nicht viel gebracht.


Im genaueren geht es um folgenden code ausschnit, welcher mich einen/mehrere joysticks aufzaehlen laesst:
(msdn/c++):

Quelltext
1:
2:
3:
//g_pDI is an initialized pointer to IDirectInput8
g_pDI->EnumDevices(DI8DEVCLASS_GAMECTRL, EnumJoysticksCallback,
                       NULL, DIEDFL_ATTACHEDONLY)



bzw. meine portierung nach delphi:

Delphi-Quelltext
1:
2:
     g_lpDI.EnumDevices(DI8DEVCLASS_GAMECTRL, EnumJoysticksCallback,
                       nil, DIEDFL_ATTACHEDONLY)



Ich habe jetzt das problem, das ich nicht weiss wie ich in delphi die funktion "EnumJoysticksCallback" uebergeben, bzw. deklarieren soll! Hier das orginal:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
BOOL CALLBACK EnumJoysticksCallback(const DIDEVICEINSTANCE*     
                                       pdidInstance, VOID* pContext)
{
    HRESULT hr;

    // Obtain an interface to the enumerated joystick.
    hr = g_pDI->CreateDevice(pdidInstance->guidInstance,  
                                &g_pJoystick, NULL);
    if(FAILED(hr)) 
        return DIENUM_CONTINUE;

    return DIENUM_STOP;
}




dank euch. :)

Moderiert von user profile iconraziel: Code- und Delphi-Tags hinzugefügt.


maxk - Di 26.07.05 19:44

Wenn es einfach nur darum geht den Zeiger auf eine Prozedur zu übergeben, schreib einfach in den Aufruf der API Funktion ein @ vor den Namen der Prozedure. Die Prozedur sieht so aus, wie die in C++ (?). Jedoch musst du wahrscheinlich noch ein stdcall; hinterschreiben, damit die Parameter in den richtigen Reihenfolge ankommen - sonst gibt's nette Fehlermeldungen ;)

Gruß,
maxk