2008-11-07 14 views

cevap

11

Öyle olduğu gibi, benim için bir fırsat dışarı Alien test etmek için iyi bir soru ... Eğer sakıncası yoksa

, ben Alien nasıl kullanılacağını açıklamak için fırsatı, böylece insanlar benim gibi (çok fazla değil require) bu konuya tökezlemeye başlayacaksınız ...

LuaForge sayfasına bağlantı veriyorsunuz, oraya gittim ve bunu elde etmek için LuaRock'a ihtiyacım olduğunu gördüm. :-( Bir gün ikincisini kurmalıyım, ama şimdilik bunu atlamayı seçtim, bu yüzden depoya gittim ve alien-0.4.1-1.win32-x86.rock'u indirdim. Her zamanki gibi açıp kapatabileceğim bir düz Zip dosyası olduğunu anladım.

require ile biraz beceriksiz sonra hızlı bir test için Lua komut yolları hack sona erdi. Ben yerine benim ortamda LUA_PATH ve LUA_CPATH oluşturmalısınız, bunu daha sonra yapacağız.

Yani uzaylı sürdü. unzipped klasörlerinden lua, core.dll ve struct.dll ve ortak bir kitaplık deposunda Alien adlı bir dizinin altına koyun.
Ve ekledim Senaryomun başlamasından hatları ollowing (kötü kesmek uyarı!): MessageBox:
package.path = 'C:/PrgCmdLine/Tecgraf/lib/?.lua;' .. package.path 
package.cpath = 'C:/PrgCmdLine/Tecgraf/lib/?.dll;' .. package.path 
require[[Alien/alien]] 

Sonra hemen görsel sonuçla basit, no-fırfırlar fonksiyonu ile denedim.

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

Evet, mesaj kutusu var! Ama Tamam'ı tıkladığınızda, muhtemelen senin gibi bir Lua kazası geçirdim. Alien dokümanlar hızlı bir taramadan sonra, I (isimsiz) suçlu öğrendim:

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

Yani çalışmak için arama yapmak için önemsiz oldu: Biz Windows API için stdcall çağırma kuralını kullanmanız gerekir: Ben EEV çağrısında tampon parametresini koymayı

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

Not ...

+0

Büyük! Lua'yı Windows için de kullanabilirsiniz (http://luaforwindows.luaforge.net/). Kutunun dışında çalışan uzaylı ile birlikte geliyor. – Jazz

+0

Evet, ama güzel bir paket olmasına rağmen, "tüm piller dahil" felsefesini beğenmedim, sonuçta Python'unkilerden daha büyük bir indirme ... – PhiLho