Es una buena pregunta, ya que es, para mí, una oportunidad para poner a prueba extranjero ...
Si no le importa, quiero aprovechar la oportunidad para explicar cómo utilizar extranjero, entonces gente como yo (no muy acostumbrada a require
) tropezando con este hilo comenzará ...
Usted da el enlace a la página de LuaForge, fui allí y vi que necesitaba LuaRock para conseguirlo. :-( Debería instalar este último algún día, pero opté por omitirlo por ahora. Así que fui al repositorio y descargué el alien-0.4.1-1.win32-x86.rock. Descubrí que era un archivo Zip simple, que podía descomprimir como de costumbre.
Después de hurgar un poco con require
, que terminó la piratería de los caminos en la secuencia de comandos Lua para una prueba rápida. debería crear LUA_PATH
y LUA_CPATH
en mi entorno en cambio, lo haré más tarde.
Tomé luego extraterrestre. lua, core.dll y struct.dll de las carpetas descomprimidas y ponerlos bajo un directorio llamado Alien en un repositorio común de la biblioteca.
Y agregué el f espués de líneas al inicio de mi guión (mala advertencia truco!):
package.path = 'C:/PrgCmdLine/Tecgraf/lib/?.lua;' .. package.path
package.cpath = 'C:/PrgCmdLine/Tecgraf/lib/?.dll;' .. package.path
require[[Alien/alien]]
Luego he probado con una simple función, sin lujos pero con resultado visual inmediata: cuadro de mensaje.
local mb = alien.User32.MessageBoxA
mb:types{ 'long', 'long', 'string', 'string', 'long' }
print(mb(0, "Hello World!", "Cliché", 64))
Sí, recibí el mensaje! Pero al hacer clic en Aceptar, recibí un accidente de Lua, probablemente como tú. Después de un análisis rápido de los documentos extranjeros, descubrí el culpable (sin nombre): tenemos que utilizar la convención de llamada stdcall para la API de Windows:
mb:types{ ret = 'long', abi = 'stdcall', 'long', 'string', 'string', 'long' }
Por lo tanto, era trivial para hacer su llamada a trabajar:
local eev = alien.Kernel32.ExpandEnvironmentStringsA
eev:types{ ret = "long", abi = 'stdcall', "string", "pointer", "long" }
local buffer = alien.buffer(512)
eev("%USERPROFILE%", buffer, 512)
print(tostring(buffer))
Nota puse el parámetro de búfer en la llamada EEV ...
Gran! También puede usar Lua para Windows (http://luaforwindows.luaforge.net/). Viene con alienígena trabajando fuera de la caja. – Jazz
Sí, pero a pesar de que es un paquete agradable, no me gusta su filosofía de "todas las baterías incluidas", lo que resulta en una descarga más grande que la de Python ... – PhiLho