- Offizieller Beitrag
Heyho,
Hab ne Funktion, der ich ein Pointer zu einer Callback Funktion übergebe. Das Funktioniert (mittlerweile) auch gut, Callback wird aufgerufen. Nun bekomme ich aber anscheindend einen Pointer zu einer Struct zurück, die die DLL erstellt:
Zitatshort **overviewBuffers:
overviewBuffers, a pointer to a location where
ps2000_get_streaming_last_values() will store a pointer to its
overview buffers that contain the sampled data. The driver creates
the overview buffers when you call ps2000_run_streaming_ns() to
start fast streaming.
Jemand ne Idee wie ich den auslesen kann? DllStructGetData funktioniert hier (wie erwartend) nicht.
Hier mal der Auszug aus der Hilfe, die komplette gibt es hier:
http://www.picotech.com/document/pdf/ps2000pg.en-4.pdf
[Blockierte Grafik: http://k76t.img-up.net/Unbenannt9qeh9.jpg]
Und hier ein Auszug aus den Sourcecode (Zeile 50ff findet das Auslesen statt)
Spoiler anzeigen
;(c) Max Reble - 2011
;femto, pico, nano, micro, milli, sec
Global Enum $PS2000_FS, $PS2000_PS, $PS2000_NS, $PS2000_US, $PS2000_MS, $PS2000_S
Global $hPICO_CallBackRegister = DllCallbackRegister("__PICO_Callback_MyGetOverviewBuffers", "none", "short;short;ulong;short;short;ulong")
Global $bGO = True
[/autoit] [autoit][/autoit] [autoit]Global $sPICO_DLL = "..\SDK\PS2000.dll"
Global $hPICO_OpenDlll = DllOpen($sPICO_DLL)
If @error Or $hPICO_OpenDlll = 0 Then Exit
Global $hPICO_Handle
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]_PICO_RunStreamingModeNS(1, $PS2000_US, 10000, 0, 100, 50000)
[/autoit] [autoit][/autoit] [autoit]While $bGO
_PICO_GetStreamingLastVal()
Sleep(100)
WEnd
Func _PICO_RunStreamingModeNS($iSampleIntervalMS = 10, $iTimeUnits = 3, $iMaxSamples = 1000, $iAutostop = 0, $iNoOfSamplesAgg = 1, $iOverviewBufferSize = 20000)
_Log("ps2000_RunStreamingModeNS ==> ", 0)
$aDLL = DllCall($hPICO_OpenDlll, "int", "ps2000_run_streaming_ns", "short", $hPICO_Handle, _
"ulong", $iSampleIntervalMS, _
"short", $iTimeUnits, _
"ulong", $iMaxSamples, _
"short", $iAutostop, _
"ulong", $iNoOfSamplesAgg, _
"ulong", $iOverviewBufferSize)
If @error Then Return SetError(1, @error, _log("Error by DLLCall: 0x" & @error))
If $aDLL[0] = 0 Then Return SetError(2, 0, _log("Error Return by function."))
_log("Success")
Return $aDLL[0]
EndFunc ;==>_PICO_RunStreamingModeNS
Func _PICO_GetStreamingLastVal()
_Log("ps2000_GetStreamingLastVal ==> ", 0)
$aDLL = DllCall($hPICO_OpenDlll, "short", "ps2000_get_streaming_last_values", "short", $hPICO_Handle, _
"ptr", DllCallbackGetPtr($hPICO_CallBackRegister))
If @error Then Return SetError(1, @error, _log("Error by DLLCall: 0x" & @error))
If $aDLL[0] = 0 Then Return SetError(2, 0, _log("Error Return by function."))
_log("Success")
Return $aDLL[0]
EndFunc ;==>_PICO_GetStreamingLastVal
Func __PICO_Callback_MyGetOverviewBuffers($ptrOverviewBuffers, $iOverflow, $uiTriggeredAt, $iTriggered, $iAutostop, $nValues)
_Log("Callback:")
$iptr = DllStructGetData($ptrOverviewBuffers, 1)
ConsoleWrite("ptrerr: " & @error & @LF)
_Log("ptrOverviewBuffers: " & $ptrOverviewBuffers)
_Log("iOverflow: " & $iOverflow)
_Log("uiTriggeredAt: " & $uiTriggeredAt)
_Log("iTriggered: " & $iTriggered)
_Log("iAutoStop: " & $iAutostop)
_Log("nValues: " & $nValues)
EndFunc ;==>__PICO_Callback_MyGetOverviewBuffers
Func _log($sLogText, $iCRLF = True)
If $iCRLF Then $sLogText &= @CRLF
ConsoleWrite($sLogText)
EndFunc ;==>_log
Gruß, und vielen Dank schon Mal
Spider