DllCallbackGetPtr und die xVideo_DLL

  • Hallo Community,

    ich hoffe hier kann jmd helfen, ich habe verzweifelt versucht Callbackfunktions zu benutzen. Und verstehe nicht was ich falsch machen. Konkret geht es darum via xVideo.dll die dll function xVideo_CaptureGetDevices auzurufen.

    Laut Dokumentation hat die Func folgende Parameter [ int xVideo_CaptureGetDevices(DWORD devicetype,CallBackEnumerator *callback,void* user);]

    Der Pointer auf die Callbackfunction sollte laut Doku so aussehen [BOOL CALLBACK CallBackEnumerator(char * name,GUID guid,void * user);
    ]

    Also habe ich zwei funktionen geschrieben die wie folgt aussehen.

    [autoit]


    Func _xVideo_CaptureGetDevices()
    $handle = DllCallbackRegister("_MyVidDevs", "BOOLEAN", "wstr;int;int")
    $aRet = DllCall($__xVideo_DLL, "int", "xVideo_CaptureGetDevices", "dword", "xVideo_VideoCapture", "ptr", DllCallbackGetPtr($handle), "int", 0 )
    DllCallbackFree($handle)
    EndFunc

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

    Func _MyVidDevs($DevName, $guid, $user)
    GUICtrlSetData($List1, $DevName)
    Return 0
    EndFunc

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

    Doch ich bekomme einfach keine Rückgabe Werte. Wenn ich aber das C Beispiel oder das Delphibeispiel aufrufe geht es, und meine Webcam wird gefunden.

    Was mache ich falsch? Sehe ich den Wald vor lauter Bäumen nicht???

    Ich hänge das ganze Programm als Anhang an.

    Der Link zum Download der xVideo Dll http://surodev.com/downloads/xVideoupdate.zip
    Die Website zur Dll lautet http://surodev.com/?page_id=94

    Es wäre super lieb, wenn ein Profi sich die Sache mal ansehen könnte, da ich mir nicht mehr zu helfen weiss.

    Der Verzweifelte

    Carsten

  • Mhhh, gibt es hier jmd der mit der xVideo.dll schonmal gearbeitet hat und mir helfen kann diese Callback Funktion ans laufen zu bringen?

    Carsten

  • Hmm, eventuell so etwa?

    [autoit]

    $hCallback = DllCallbackRegister("_MyCallBackEnumerator", "BOOL", "str;uint64;uint64;ptr")

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

    Func _xVideo_CaptureGetDevices($iType, $pCallback, $pUser=0)
    Local $aRet = DllCall($__xVideo_DLL, "int", "xVideo_CaptureGetDevices", "dword", $iType, "ptr", $pCallback, "ptr", $pUser )
    If @error Then Return SetError(1, 0, 0)
    Return $aRet[0]
    EndFunc

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

    Func _MyCallBackEnumerator($name, $guid_part1, $guid_part2, $user)
    Local $tGUID = DllStructCreate($tagGUID)
    Local $t = DllStructCreate("uint64;uint64", DLLStructGetPtr($tGUID))
    DllStructSetData($t, 1, $guid_part1)
    DllStructSetData($t, 2, $guid_part2)

    ConsoleWrite($name ": " & _WinAPI_StringFromGUID(DllStructGetPtr($tGUID)) & @LF)

    Return 0
    EndFunc

    [/autoit]
  • Hallo progandy,

    leider funktioniert dein ansatz auch nicht. Ich bin mir nicht sicher ob die Paramter in der Hilfe Datei von der Dll wirklich stimmen. Jedenfalls vielen dank für das Stück Code. Ich glaube für das erste Projekt ist die Nummer mit dieser Dll einfach zu Groß.

    Carsten