Hallo,
die angekündigte LUA-udf ist so einigermaßen fertig. Es gibt noch Probleme, für die ich aber noch keine Lösung gefunden habe. Vielleicht weiß jemand anderes die Ursache.
Es ist möglich von AutoIt aus die LUA-skripte auszuführen, globale Variablen zu setzen und auszulesen, sowie LUA-funktionen aufzurufen. Neue Funktionen zu definieren ist geplant, geht aber noch nicht.
In dem Archiv sind zwei DLLs für 32 bit und 64 bit.
LUA.au3 ist die UDF
1.au3 ist ein Beispiel
1.lua ist ein Beispielskript
1.out ist 1.lua in kompilierter Form
Bugs und Probleme:
- in 64-bit-dll geht _LUA_PushNumber nicht. Es wird immer 0 auf den Stack geschoben. Ich hab aber keine Source von der 64-bit dll
- Registrieren von neuen Funktionen geht nicht
- Fehlermeldungen in LUA-skripten werden nicht angezeigt
Spoiler anzeigen
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseX64=n
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include "LUA.au3"
$lua = _LUA_Open() ; LUA öffnen
[/autoit] [autoit][/autoit] [autoit]_LUA_OpenDefaultLibs($lua) ; Standart-module hinzufügen (sonst geht print nicht)
[/autoit] [autoit][/autoit] [autoit]_LUA_Push($lua, "number", 666) ; Wert 666 auf Stack schieben (Statt number geht auch integer oder string; das Ergebnis ist gleich)
_LUA_SetGlobal($lua, "Variable_1") ; Dem Wert auf dem Stack (666) einen Variablennamen zuweisen
_LUA_RunFile($lua, "1.lua") ; Datei ausführen
[/autoit] [autoit][/autoit] [autoit]_LUA_GetGlobal($lua, "PrintMessage") ; Variable (hier Funktion) auf Stack schieben (wurde im Skript definiert)
_LUA_Push($lua, "string", "Sent by AutoIt") ; Parameter auf Stack schieben
_Lua_Call($lua, 1, 0) ; Funktion ausführen mit 1 Parameter und 0 Rückgabewerten
; Achte auf Konsolenausgabe
[/autoit] [autoit][/autoit] [autoit]_LUA_GetGlobal($lua, "name") ; Globale Variable name auf Stack schieben (wurde im Skript definiert)
MsgBox(0, "", _Lua_ToString($lua, 1)) ; Stack mit index 1 (die Variable) als String in AutoIt ausgeben und in MessageBox anzeigen
_LUA_Pop($lua, 1) ; Unnütze Variable name wieder vom Stack löschen
_LUA_GetGlobal($lua, "Variable_1") ; Globale Variable Variable_1 auf Stack schieben (wurde in AutoIt definiert und im Skript verändert)
MsgBox(0, "", _Lua_ToNumber($lua, 1)); Stack mit index 1 (die Variable) als Float in AutoIt ausgeben und in MessageBox anzeigen
_LUA_Close($lua) ; LUA beenden
[/autoit] [autoit][/autoit] [autoit]; Statt _LUA_Pop($lua, 1) hätte man auch Variable auf Stack lassen können und später andere Variable mit _Lua_ToNumber($lua, 2) auslesen können
[/autoit]Spoiler anzeigen
DOWNLOAD: autoit.de/wcf/attachment/13162/