DllCall, Rückgabe der Werte in den Parametern

  • Hallo zusammen,
    ich habe ein Problem, den Status eines HID USB-Device zurückzulesen.
    Bei dem USB-Device handelt es sich um einen USB-Button der Fa. USBBUTTON(?).
    Es ist keine Dokumentation vorhanden, die Feinheiten habe ich mir aus deren SDK herausgelesen.
    Ich kann bereits das Device initialisieren und auch die LED-Farben ändern.
    Leider wird zur Abfrage des Tastenstatus (gedrückt, nicht gedrückt) der Status als Pointer in den Parametern übergeben.

    In der PacDrive.h steht:
    PACDRIVE_API BOOL __stdcall USBButtonGetState(INT id, PBOOL state);

    Daraus habe ich nach Recherche im Internet und hier im Forum folgendes gemacht:

    Code
    $result=""
    $struct=DllStructCreate("BOOLEAN")
    $myState=DllStructGetPtr($struct)
    
    
    $myID=DllCall("pacdrive32.dll","int","PacInitialize")
    If $myID[0]>0 Then
    	$result=DllCall("pacdrive32.dll","BOOLEAN","USBButtonGetState","int",$myID,"ptr",$myState)
    	MsgBox(0,"",$mystate&" "&DllStructGetData($struct,1))
    EndIf

    In der Messagebox bekomme ich die Adresse der Variablen $mystate angezeigt. Das Ziel, auf das $mystate zeigt,
    ist jedoch immer 0, egal, ob ich die Taste drücke oder nicht.
    Was mache ich falsch?

    Vielen Dank im Voraus, Caipitrooper
    :)

  • versuch mal so (ungetestet):

    AutoIt
    $myID = DllCall("pacdrive32.dll", "int", "PacInitialize")
    If IsArray($myID) And $myID[0] <> 0 Then
    	$a_Result = DllCall("pacdrive32.dll", "BOOLEAN", "USBButtonGetState", "int", $myID[0], "BOOLEAN*", 0)
    	MsgBox(0, "", $a_Result[2])
    EndIf
  • Nein, geht leider nicht. Ich bekomme den Aufruf auch nicht mehr erfolgreich zurückgemeldet,
    ($a_Result[0] ist jetzt 0, war zumindest vorher mit meinem Script 1)
    $a_Result[2] ist 0, egal ob ich drücke oder nicht.

  • Hab jetzt die Lösung:

    AutoIt
    $myState=""
    $myID = DllCall("pacdrive32.dll", "int", "PacInitialize")
    If IsArray($myID) And $myID[0] <> 0 Then
    	$a_Result = DllCall("pacdrive32.dll", "BOOLEAN", "USBButtonGetState", "int", $myID, "BOOLEAN*", $myState)
    	MsgBox(0, "", $a_Result[2])
    EndIf

    $myID durfte keinen Index haben und als Parameter musste ich $myState anstatt 0 übergeben.
    Ich hab keine Ahnung, warum, aber Hauptsache, es funkt. ^^

    Vielen Dank für die Hilfe.

    Caipitrooper