DllCallback Pointer --> DllCall gibt fehler aus

    • Offizieller Beitrag

    Heyho,

    Ich stehe mal wieder vor einem mir unlösbaren Problem. Ich bin grade dabei ein kleines Oszilloskop via USB fernzusteuern (PicoScope 2003). Die meisten Funktionen habe ich auch schon impliziert, wie das Verbinden zur box, das Auswählen des Chanels und das starten des Streamings. Das funktioniert alles soweit wunderbar, die Dll gibt immer schon True zurück, also gehe ich mal davon aus, dass das soweit funktioniert.

    Leider funktioniert das eigentlich interessante nicht. Nämlich das Streamen. Fürs Streamen braucht die DLL (wie immer) ein Handle der Angeschlossenen Box und außerdem noch einen Pointer zu einer Callback Funktion:

    Code
    short ps2000_get_streaming_last_values (
    short handle
    GetOverviewBuffersMaxMin lpGetOverviewBuffersMaxMin
    )

    Hier mal ein C ausschnitt:

    Code
    return ps2000_get_streaming_last_values(handle, (void *)GetValuesCallback);

    Und hier die Dokumentation der DLL, interessant ist da wohl Seite 16 und Seite 54.
    http://www.pc-oscilloscopes.com/manuals/ps2000pg-en.pdf

    Und hier mein Versuch in AutoIt, der mir immer nur 0 (Fail) zurück gibt:

    Spoiler anzeigen
    [autoit]

    Global $hPICO_CallBackRegister = DllCallbackRegister("__PICO_Callback_MyGetOverviewBuffers", "none", "short;short;ulong;short;short;ulong")

    [/autoit] [autoit][/autoit] [autoit]

    ;[...]

    [/autoit] [autoit][/autoit] [autoit]

    $aDLLret = DllCall($hPICO_OpenDll, "short", "ps2000_get_streaming_last_values", "short", $hPICO_Handle, _
    "ptr", DllCallbackGetPtr($hPICO_CallBackRegister))
    If $aDLLret[0] = 0 Then MsgBox(16,"","FAIL"); failed

    [/autoit] [autoit][/autoit] [autoit]

    ;[...]

    [/autoit] [autoit][/autoit] [autoit]

    Func __PICO_Callback_MyGetOverviewBuffers($iOverviewBuffers, $iOverflow, $uiTriggeredAt, $iTriggered, $iAutostop, $nValues)
    _Log("Callback:")
    _Log("iOverviewBuffers: "&$iOverviewBuffers)
    _Log("iOverflow: "&$iOverflow)
    _Log("uiTriggeredAt: "&$uiTriggeredAt)
    _Log("iTriggered: "&$iTriggered)
    _Log("iAutoStop: "&$iAutostop)
    _Log("nValues: "&$nValues)
    EndFunc

    [/autoit]

    Über Hilfe würde ich mich sehr freuen, vielen Dank schon mal :)

    Gruß
    Spider