Dllcall return variable zu kurz

  • hallo

    funktion in einer dll:
    CVGetDeviceName( CVVIDCAPSYSTEM capSystem, int deviceNum, char* devNameBuffer, int* nameBufLen)
    devNameBuffer - buffer to receive ASCIIZ device name. must be allocated by caller!

    [autoit]

    $Char=""
    $BSize=8
    $Ret=DllCall($Dll,"none","CVGetDeviceName","int",$HWND[1], "int", $i, "int64*", $Char, "int*", $BSize)
    MsgBox(0,"",BinaryToString($Ret[3]))

    [/autoit]

    in diesem fall erhalte ich "GRABSTER", es sollte aber "GRABSTER SERIES, Capture" lauten... (int64 kann nicht mehr!?)
    $Ret[4]=24 (das stimmt = die länge des strings)

    wenn ich statt "int64" "str" nehm, kommt ein leerer string zurück,
    wenn $BSize>8 ist, dann kommt auch nichts zurück!?


    weiß jemand zufällig, wie ich jetzt an den gesammten string komme?
    bzw. was bedeutet: "must be allocated by caller!"?

    thx
    eukalyptus

  • Das bedeutet, dass du den Speicher reservieren musst :)
    Mach doch mal nen String Davor:

    Spoiler anzeigen
    [autoit]

    $Char = ""
    For $i = 0 To 256
    $char &= " "
    next
    $BSize = Stringlen($Char)
    $Ret=DllCall($Dll,"none","CVGetDeviceName","int",$HWND[1], "int", $i, "str*", $Char, "int*", $BSize)
    MsgBox(0,"",StringStripWS($Ret[3],2))

    [/autoit]