- 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ß
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.
#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()"
; == Parameter: • String mit Lua-Code
_Lua_DoString($sStrRun)
;---------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------
; == 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, '(', ')']
; == 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)
; == 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)
;---------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------
; == 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
;---------------------------------------------------------------------------------------------------