Parameter / Return Values mit Adlib-Funktionen

  • Hi Com,

    aufgrund von Nachfragen, eigenen Interessen und Langeweile habe ich mal einen Mix aus UDF und How-To über Parameter und Return Values mit Adlib-Funktionen gemacht.
    Dies geschiet doch die doch sehr praktischen Funktionen EnvSet und EnvGet. (Endlich habe ich mal einen Sinn für diese Funktionen entdeckt)
    Das Prinzip ist einfach zu verstehen, es werden Variablen in der Umgebung festgelegt und in der Adlib-Funktion bzw. eine "Return Value" irgentwo ausgelesen. (EnvGet)

    Hier nun das Beispiel mit Funktion:

    Parameter / Return Values mit Adlib-Funktionen
    [autoit]

    ; *** Beispiel für Parameter und Return Values in Adlib-Funktionen ***
    ; ===<<< >>>=== ===<<< >>>=== ===<<< >>>=== ===<<< >>>=== ===<<< >>>===
    _Adlibregister("_MyAdLibWithParams", "Text - Hier können Buchstaben" & @CRLF & @Tab & "ausgelesen werden, ebenfalls" & @CRLF & @Tab & "Text mit Makros!", True, 255)
    While 1
    If EnvGet("$IfReadyToExit") Then ExitLoop ; Wenn die "Return Value" True gesetzt wurde...
    WEnd
    Func _AdlibRegister($sFunction, $sParam, $vParam, $iParam, $iTime = 500)
    EnvSet("$sParam", $sParam)
    EnvSet("$vParam", $vParam)
    EnvSet("$iParam", $iParam) ; Parameter aus der Definition in eine Umgebungsvariable setzen
    AdlibRegister($sFunction, $iTime)
    EndFunc
    Func _MyAdLibWithParams()
    Local $sParamGet = EnvGet("$sParam"), $vParamGet = EnvGet("$vParam"), $iParamGet = EnvGet("$iParam") ; Parameter aus der Umgebung auslesen
    MsgBox(64, "_MyAdLibWithParams", "String: " & $sParamGet & @CRLF _
    & "Status: " & $vParamGet & @CRLF _
    & "Integer: " & $iParamGet & @CRLF _
    & "Das sind Parameter in einer Adlib-Funktion, die im Hintergrund läuft!")
    ConsoleWrite($sParamGet & @CRLF & $vParamGet & @CRLF & $iParamGet & @CRLF)
    AdlibUnregister("_MyAdLibWithParams") ; Muss nicht unbedingt...
    EnvSet("$IfReadyToExit", True) ; Eine Art Returnvalue zur Adlib-Funktion
    EndFunc

    [/autoit]

    Man kann es auch mit Globalen machen, allerdings muss man bei der Variante vorher Globale deklarieren, das ist bei meiner Version nicht nötig, somit ist das wohl die elegantere Lösung.

    Wenn irgentetwas unklar ist, bitte einfach fragen, ich versuche, es gut möglichst zu erklären.

  • So kommen keine Warnungen ;)

    Spoiler anzeigen
    [autoit]

    Global $sParam, $vParam, $iParam, $IfReadyToExit

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

    _Adlibregister("_MyAdLibWithParams", "Text - Hier können Buchstaben" & @CRLF & @Tab & "ausgelesen werden, ebenfalls" & @CRLF & @Tab & "Text mit Makros!", True, 255)

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

    While 1
    If $IfReadyToExit Then ExitLoop
    WEnd

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

    Func _AdlibRegister($sFunction, $sParam1, $vParam1, $iParam1, $iTime = 500)
    $sParam = $sParam1
    $vParam = $vParam1
    $iParam = $iParam1
    AdlibRegister($sFunction, $iTime)
    EndFunc

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

    Func _MyAdLibWithParams()
    MsgBox(64, "_MyAdLibWithParams", "String: " & $sParam & @CRLF _
    & "Status: " & $vParam & @CRLF _
    & "Integer: " & $iParam & @CRLF _
    & "Das sind Parameter in einer Adlib-Funktion, die im Hintergrund läuft!")
    ConsoleWrite($sParam & @CRLF & $vParam & @CRLF & $iParam & @CRLF)
    AdlibUnregister("_MyAdLibWithParams") ; Muss nicht unbedingt...
    $IfReadyToExit = True
    EndFunc

    [/autoit]

    Die Warnungen hättste aber auch selber beseitigen können, dass setzte ich mal bei deinem Wissensstand voraus.

  • 1. Ich habe nach einer Funktion für die Env. Befehle gesucht.
    2. Man muss bei dir noch Global deklarieren, das ist nicht platzsparend. :P

    Außerdem hatte ich es mit Globalen gar nicht erst versucht, ich habe direkt mit EnvSet/Get angefangen.
    Naja wie gesagt, man muss vorher noch (umständlich) Globale deklarieren, das muss nicht sein. :)

  • Du benutzt doch höchstwahrscheinlich in deinem restlichen Script auch globale Variablen, die du am Anfang deklarierst, da kannst du doch noch die paar mit angeben, was ist denn daran nicht platzsparend bzw. "umständlich"?
    Außerdem fällt bei mir dies weg

    [autoit]

    Local $sParamGet = EnvGet("$sParam"), $vParamGet = EnvGet("$vParam"), $iParamGet = EnvGet("$iParam")

    [/autoit]


    und stattdessen am Anfang dann die Globalen, also ist im Prinzip der Platz derselbe.

  • Dann schlag doch mal vor wie es als UDF aussehen könnte.

    Diskutieren mag ich gerne. :D