COM Funktion

  • Hallo erstmal,

    mein erster Post, also kurze Vorstellung:

    Ich "programmiere" seit einigen Jahren in Delphi, bin erst kürzlich auf Autoit gestoßen, ein geniales Tool um Programme, die eigentlich nichts miteinander zu tun haben wollen zu "überreden". Deshalb auch meine erste Frage:


    Ich will ein COM-Objekt steuern. geht auch alles gut bis Variablen übergeben werden:

    Spoiler anzeigen
    [autoit]

    Dim $x,$y, $Z, $t, $r, $m

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

    $oZeiss = ObjCreate("CZ.EMParamMgrCtrl.1";)
    $oMyError = ObjEvent("AutoIt.Error","MyErrFunc";)

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

    GUICreate ("Embedded ImageCompare control Test", 620, 425, -1, -1)
    GUICtrlCreateObj($oZeiss, 0, 0 , 180, 185)

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

    MsgBox(0,'',$oZeiss.GetRegDBPath())

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

    MsgBox(0,'',$x)
    MsgBox(0,'',$oZeiss.GetStagePositionD($x, $y, $Z, $t, $r, $m))
    MsgBox(0,'',$x)

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

    Func MyErrFunc()
    $HexNumber=hex($oMyError.number,8)
    Msgbox(0,"","We intercepted a COM Error !" & @CRLF & _
    "Number is: " & $HexNumber & @CRLF & _
    "Windescription is: " & $oMyError.windescription )

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

    SetError(1) ; something to check for when this function returns
    Endfunc

    [/autoit]

    Kurz: Die OCX wird also korrekt angesprochen und läßt sich steuern.

    Nur wenn ich Variablen übergeben will, tritt ein Fehler der Art "Falscher Variablentyp" auf:

    [autoit]

    MsgBox(0,'',$oZeiss.GetStagePositionD($x, $y, $Z, $t, $r, $m))

    [/autoit]


    geht also nicht.

    Die Methode in der OCX hat folgendes Interface:

    [id(0x000000a4)]
    long GetStagePositionD(
    double* x,
    double* y,
    double* z,
    double* t,
    double* r,
    double* m);

    Wie kann ich in Autoit Variablentypen deklarieren? Was macht Autoit bei einer Deklaration mit DIM eigentlich? Wird die Variable automatisch den Anforderungen angepasst?

    p.s. ich komme mit dem code tag in dem Editor nicht klar, es werden alle Zeilenumbrüche gelöscht, daher kommt der Quelltext ohne code tag


    Edit BugFix: Habe mal die Tags gesetzt ;)
    Edit Nogo: Danke!

    [ spoiler ][ autoit ] Code [ /autoit ][ /spoiler ] ohne die Leerzeichen

    Einmal editiert, zuletzt von Nogo (10. Oktober 2007 um 09:50)

    • Offizieller Beitrag

    Hi und :willkommen:

    Zitat

    Wie kann ich in Autoit Variablentypen deklarieren? Was macht Autoit bei einer Deklaration mit DIM eigentlich? Wird die Variable automatisch den Anforderungen angepasst?

    Grundsätzlich definierst du die Variablen für ihren Space (also Global, Local, Dim).
    Der Variablentyp wird dabei der momentanen Verwendung angepaßt.
    Bsp.:

    [autoit]

    Dim $Zahl1 = 1
    Dim $String1 = "5"
    MsgBox(0, '', $Zahl1 + $String1) ; liefert 6

    [/autoit]

    Du kannst eine bestimmte Verwendung erzwingen mit Number($var) oder String($var).
    Eine Ausnahme bildet der Variablentyp Array. Arrayvariablen müssen auch als solche deklariert werden.
    z.B. Dim $array[10][2]
    Einige Funktionen liefern ein Array zurück (z.B. _FileReadToArray). Hier ist die Variable nur namentlich ohne Dimensionen zu deklarieren.
    Dim $arFile
    _FileReadToArray($FilePath, $arFile)

    Zu deiner Problemstellung kann ich momentan nicht viel sagen. Vielleicht hilft es GetStagePositionD als Array zu definieren:

    [autoit]

    Dim $GetStagePositionD[6] = [ $x, $y, $z, $t, $r, $m ]

    [/autoit]

    Aber ich habe keine Möglichkeit das zu testen.