AutoIt-Object -- Parameter einer Methode als ByRef

    • Offizieller Beitrag

    Hi,
    ich habe gerade mit der AutoitObject UDF ein Problem.
    Ich möchte ByRef-Parameter in einer Methode einsetzen. Innerhalb der Methode funktioniert das noch ordentlich, aber die ByRef-Variable selbst wird nicht geändert obwohl der ByRef-Parameter im Aufruf (der ja nur einen Verweis auf die ByRef-Variable darstellt) den richtigen Wert annimmt.
    Wo hängt der Hammer? :wacko:

    Edit: Habe es jetzt parallel im EN-Forum gepostet.

    Spoiler anzeigen
    [autoit]

    #include <AutoItObject.au3>

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

    _AutoItObject_Startup()

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

    ; == Problematik:
    ; Eine unveränderliche Funktion ("_SomeFunc") soll über ein Objekt für diese Funktion aufrufbar sein.
    ; Die Funktion kann ByRef-Parameter enthalten. Die ByRef-Funktionalität muss gewährleistet bleiben.

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

    $oTest = _CreateObjFunc('Test')

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

    $a1 = 5
    ConsoleWrite('Return Methode = ' & $oTest.Meth($a1, 3, 5) & ' [OK]' & @LF)
    ConsoleWrite('ByRef "$a1" nach Aufruf = ' & $a1 & ' [FALSCH]' & @LF) ; == obwohl Parameter $a1 in der Methode geändert wurde bleibt $a1 unverändert im Wert

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

    ;------------------------------------- OBJECT ------------------------------------------------------
    Func _CreateObjFunc($_sName)
    Local $oSelf = _AutoItObject_Create()
    _AutoItObject_AddMethod($oSelf, 'Meth', "_Meth")
    Return $oSelf
    EndFunc

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

    Func _Meth(ByRef $oSelf, ByRef $A, $B=1, $C=1)
    Local $vRet = _SomeFunc($A, $B, $C) ; == $A ist ByRef
    Local $iErr = @error
    ConsoleWrite('ByRef "$A" in Methode = ' & $A & ' [OK]' & @LF) ; == $A wurde ByRef geändert -- OK
    Return SetError($iErr,0,$vRet)
    EndFunc
    ;---------------------------------------------------------------------------------------------------

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

    Func _SomeFunc(ByRef $A, $B=1, $C=1)
    $A += $B + $C
    Return $A
    EndFunc

    [/autoit]