外部ライブラリ(DLL)にある関数を実行する
alien (ありえん!) ではなく、エーリアン、つまり、動的にライブラリをロードして実行するライブラリ。
Windows で MessageBox を使う例
require( "alien" ) local mb = alien.User32.MessageBoxA mb:types{ ret = 'long', abi = 'stdcall', 'long', 'string', 'string', 'long' } print(mb(0, "Hello World!", "test", 64))
環境変数を展開して取得する(%USERPROFILE%の値を取得する)例
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))
Windows API の EnumWindows を使う例
require 'alien' -- API EnumWindows = alien.user32.EnumWindows EnumWindows:types {"callback", "pointer", abi="stdcall"} GetClassName = alien.user32.GetClassNameA GetClassName:types {"long", "pointer", "int", abi="stdcall" } -- callback local buf = alien.buffer(512) local function enum_func(hwnd, p) GetClassName(hwnd, buf, 511) print (hwnd..":"..tostring(buf)) return 1 end local callback_func = alien.callback( enum_func, {"int", "pointer", abi="stdcall"}) -- call EnumWindows(callback_func, nil)