Com-Objekt mit 2D Array Rückgabe

  • Hey,

    habe ein Problem mit einer Com-Anfrage (Objekt = DVBViewer pro).
    zunächst mal die Doku der Funktion:

    Spoiler anzeigen

    Hier mein Skript:

    Spoiler anzeigen
    [autoit]


    #include <array.au3>
    $DVBViewer = ObjGet("", "DVBViewerServer.DVBViewer") ;Verbindung aufbauen -> klappt
    If $DVBViewer = 0 Then ; ohne Verbindung das Skript beenden
    MsgBox(1, "", "Keine Verbindung zum DVBViewer möglich")
    Exit
    EndIf
    dim $list
    $SID = $DVBViewer.CurrentChannel.Tuner.SID() ; SID des getunten Senders holen
    $TSID = $DVBViewer.CurrentChannel.Tuner.TransportStreamID() ;TID des getunten Senders holen
    $NID = $DVBViewer.CurrentChannel.Tuner.NetworkID()
    $EPGID = $SID + $TSID * 65536 ;DVBV spezifisch, diese Zeile ist richtig

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

    ConsoleWrite($SID & " " & $TSID & " " & $NID & " " & $EPGID & @CRLF) ;debug zeile -> Abfragen sind erfolgreich

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

    $test = $DVBViewer.EPGManager.GetasArray($EPGID,0,0, $list) ;Array holen

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

    ConsoleWrite($test & @CRLF) ; Den "Count" der Arrayeinträge bekomme ich, die Anfrage klappt also scheinbar

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

    If IsArray($list) then _ArrayDisplay($list) ; $list ist nur kein Array
    MsgBox(1, "", @error) ; @error = 0

    [/autoit]


    Seht ihr den Fehler? Gibt es bei Com-Rückgaben als Array noch etwas besonderes zu beachten?

    Danke schonmal für die Hilfe :)

    Gruß nuts

    Einmal editiert, zuletzt von nuts (7. Januar 2010 um 10:40)

    • Offizieller Beitrag

    Schau mal welchen Type die Variable $list hat.

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    $DVBViewer = ObjGet("", "DVBViewerServer.DVBViewer") ;Verbindung aufbauen -> klappt
    If $DVBViewer = 0 Then ; ohne Verbindung das Skript beenden
    MsgBox(1, "", "Keine Verbindung zum DVBViewer möglich")
    Exit
    EndIf
    dim $list
    $SID = $DVBViewer.CurrentChannel.Tuner.SID() ; SID des getunten Senders holen
    $TSID = $DVBViewer.CurrentChannel.Tuner.TransportStreamID() ;TID des getunten Senders holen
    $NID = $DVBViewer.CurrentChannel.Tuner.NetworkID()
    $EPGID = $SID + $TSID * 65536 ;DVBV spezifisch, diese Zeile ist richtig

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

    ConsoleWrite($SID & " " & $TSID & " " & $NID & " " & $EPGID & @CRLF) ;debug zeile -> Abfragen sind erfolgreich

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

    $test = $DVBViewer.EPGManager.GetasArray($EPGID,0,0, $list) ;Array holen

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

    ConsoleWrite($test & @CRLF) ; Den "Count" der Arrayeinträge bekomme ich, die Anfrage klappt also scheinbar
    ConsoleWrite(VarGetType($list) & @CRLF)
    If IsArray($list) then _ArrayDisplay($list) ; $list ist nur kein Array
    MsgBox(1, "", @error) ; @error = 0

    [/autoit]

    Edit: Post 2000 :rock:

  • AutoIt kann keine ByRef-Parameter bei COM-Objekten verwenden

    Zitat

    Limitations on COM Events in AutoIt
    Some Objects (like the 'WebBrowser') pass arguments to their Event Functions 'by reference'. This is intended to allow the user change these arguments and passing it back to the Object. However, AutoIt uses it's own variable scheme, which is not compatible to COM variables. This means that all values from Objects need to be converted into AutoIt variables, thus loosing the reference to the original memory space. Maybe in the near future we can solve this limitation for you !

  • Hm verdammt :(
    Gibts da kein workaround?

    Edit \ Gibts vielleicht eine .dll die man für den Aufruf verwenden könnte und das Ergebnis als Array liefert?
    Brauche nur die Daten, die SpeicherReferenz zum zurückgeben brauch ich erstmal nicht, da es die Funktion AddArray gar nicht gibt.

    Einmal editiert, zuletzt von nuts (7. Januar 2010 um 11:43)