2008-11-07 11 views

Répondre

11

Il est une bonne question car il est, pour moi, une occasion de tester Alien ...

Si vous ne me dérange pas, je prends l'occasion d'expliquer comment utiliser Alien, donc les gens comme moi (pas très habitués à require) tombant sur ce fil vont commencer ...

Vous donnez le lien vers la page LuaForge, j'y suis allé, et j'ai vu que j'avais besoin de LuaRock pour l'obtenir. :-( Je devrais installer ce dernier un jour, mais j'ai choisi d'ignorer cela pour l'instant.Je suis donc allé dans le dépôt et j'ai téléchargé le alien-0.4.1-1.win32-x86.rock. J'ai découvert qu'il s'agissait d'un fichier Zip, que je pouvais décompresser comme d'habitude

Après tâtonner un peu avec require, j'ai fini le piratage des chemins dans le script Lua pour un test rapide. Je créer LUA_PATH et LUA_CPATH dans mon environnement à la place, je le ferai plus tard.

Je pris étranger. lua, core.dll et struct.dll à partir des dossiers décompressés et les placer dans un répertoire nommé Alien dans un référentiel de bibliothèque commun
Et j'ai ajouté le f uite lignes au début de mon script (mauvais avertissement hack!):

package.path = 'C:/PrgCmdLine/Tecgraf/lib/?.lua;' .. package.path 
package.cpath = 'C:/PrgCmdLine/Tecgraf/lib/?.dll;' .. package.path 
require[[Alien/alien]] 

Alors je l'ai essayé avec une fonction simple sans fioritures avec un résultat visuel immédiat: MessageBox.

local mb = alien.User32.MessageBoxA 
mb:types{ 'long', 'long', 'string', 'string', 'long' } 
print(mb(0, "Hello World!", "Cliché", 64)) 

Oui, j'ai reçu le message! Mais en cliquant OK, j'ai eu un accident de Lua, probablement comme vous. Après une analyse rapide des documents étrangers, j'ai découvert le (sans nom) coupable: nous avons besoin d'utiliser la convention d'appel stdcall pour l'API Windows:

mb:types{ ret = 'long', abi = 'stdcall', 'long', 'string', 'string', 'long' } 

Il est trivial de faire appel au travail:

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)) 

Remarque je mets le paramètre tampon dans l'appel EEV ...

+0

Great! Vous pouvez également utiliser Lua pour Windows (http://luaforwindows.luaforge.net/). Il vient avec l'extraterrestre travaillant hors de la boîte. – Jazz

+0

Oui, mais bien que ce soit un joli paquet, je n'aime pas sa philosophie "toutes batteries incluses", ce qui entraîne un téléchargement plus important que celui de Python ... – PhiLho

Questions connexes