- 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
#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.
$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
;------------------------------------- OBJECT ------------------------------------------------------
Func _CreateObjFunc($_sName)
Local $oSelf = _AutoItObject_Create()
_AutoItObject_AddMethod($oSelf, 'Meth', "_Meth")
Return $oSelf
EndFunc
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
;---------------------------------------------------------------------------------------------------
Func _SomeFunc(ByRef $A, $B=1, $C=1)
$A += $B + $C
Return $A
EndFunc