• Offizieller Beitrag

    Im EN-Forum hatte ich diesen Beitrag zur Anwendung von Lua-Code innerhalb von AutoIt gefunden.
    Darauf basierend habe ich einige weitere Funktionen hinzugefügt und einen komfortableren Aufruf gestaltet. Zusammengefasst in der "LuaInline.au3"

    Grundsätzlich sind damit alle Möglichkeiten von Lua auch in AutoIt nutzbar. Vor allem kann man die unzähligen Bibliotheken einbinden (was in dem kastrierten Lua in SciTE leider nur z.T. geht).
    Tobt euch aus und habt Spaß :thumbup:

    Code
    Zur Anwendung benötigt ihr:
      	• _Lua_StartUp()
      und:
    	• _Lua_DoString()       Führt einen String mit Lua-Code aus, (kein Return möglich)               oder _
      	• _Lua_RunFuncLocal()   Erstellt eine Funktion zur Laufzeit und führt sie aus, (Return möglich)  oder _
    	• _Lua_RunFuncFile()    Führt eine bestehende Funktion aus einer Lua-Datei aus, (Return möglich)
      Die weiteren Funktionen werden intern genutzt. Um Push und Pop braucht ihr euch nicht kümmern.
    Bsp.
    [autoit]

    #include "LuaInline.au3"

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

    _Lua_StartUp() ; == Initialisiert Lua, Shutdown automatisch bei AutoIt-Ende

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

    ;---------------------------------------------------------------------------------------------------
    ; == Bsp.: _Lua_DoString()
    ; == String mit Lua-Code wird geladen und ausgeführt, kein Returnwert möglich
    Local $sStrRun = _
    "local datetable = os.date(""*t"", os.time()) " & _
    "print(string.format('%02d:%02d:%02d', datetable.hour, " & _
    "datetable.min, " & _
    "datetable.sec), 'Hallo Welt!') " & _
    "io.flush()"

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

    ; == Parameter: • String mit Lua-Code
    _Lua_DoString($sStrRun)
    ;---------------------------------------------------------------------------------------------------

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

    ;---------------------------------------------------------------------------------------------------
    ; == Bsp.: _Lua_RunFuncLocal()
    ; == String mit Code einer Funktion wird in eine temporäre Datei geschrieben und geladen,
    ; == Parameter (sofern vorhanden) werden als Array übergeben,
    ; == wenn Returnwerte: für jeden Returnwert den Datentyp angeben ("num", "str", "bool") in Kommagetrenntem String.
    ; == Mehrere Returnwerte werden als Array zurückgegeben
    ; == Nach Aufruf wird die Datei sofort gelöscht
    Local $sFunc = _
    "function StringBetweenBalanced(_s, _left, _right) " & _
    "local match = _s:match('(%b'.._left.._right..')') " & _
    "if match then return match:sub(2, #match -1) " & _
    "else return '' end end"
    Local $sText = _
    "Das ist ein Text (hier ist ein Ausdruck in Klammern (der wiederum einen Ausdruck in Klammern enthält), " & _
    "alles zwischen den äußeren Klammern ist der Match) -- das hier nicht mehr."
    Local $aP[3] = [$sText, '(', ')']

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

    ; == Parameter: • String mit der Funktion, • Funktionsname, • Parameterarray, • Return-Typ
    Local $Ret = _Lua_RunFuncLocal($sFunc, 'StringBetweenBalanced', $aP, 'str')
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & " var: $Ret --> " & $Ret & @LF)

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

    ; == Funktion ohne Parameterübergabe
    $sFunc = "function Random() return math.random() end"
    $Ret = _Lua_RunFuncLocal($sFunc, 'Random', '', 'num')
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & " var: $Ret --> " & $Ret & @LF)
    ;---------------------------------------------------------------------------------------------------

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

    ;---------------------------------------------------------------------------------------------------
    ; == Bsp.: _Lua_RunFuncFile()
    ; == Die übergebene Datei wird geladen, Parameter (sofern vorhanden) werden als Array übergeben,
    ; == wenn Returnwerte: für jeden Returnwert den Datentyp angeben ("num", "str", "bool") in Kommagetrenntem String.
    ; == Mehrere Returnwerte werden als Array zurückgegeben
    Local $aP[2] = [20, 5]
    ; == Parameter: • Lua-Datei, • Funktionsname aus dieser Datei, • Parameterarray, • Return-Typ
    ; == Um die Lua-Testdatei zu nutzen: Wenn nicht im selben Ordner, wie diese Datei, den exakten Pfad angeben.
    $Ret = _Lua_RunFuncFile('LuaInlineTest.lua', 'mul_div', $aP, 'num,num,str') ; Multiplikation/Division/Text
    For $i = 0 To UBound($Ret) -1
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & " var: $Ret[" & $i & "] --> " & $Ret[$i] & @LF)
    Next
    ;---------------------------------------------------------------------------------------------------

    [/autoit]
    • Offizieller Beitrag

    Beim Versuch Bibliotheken mittels "require" einzubinden ist mir aufgefallen, dass dort keine durchgehende Kompatibilität existiert. Mit der hier integrierten lua51.dll konnte ich bisher nur die "lfs.dll" laden. "iup" oder "luacom" werden zwar erkannt, aber der Prozedureinsprungpunkt paßt nicht.
    Im Moment habe ich nur eine Edge-Modem Verbindung und kann mir somit kaum was aus dem Netz saugen. Sowie das wieder besser ist, werde ich mal schauen, dass ich eine Lua-Version mit vielen passenden Bibliotheken finde.