package.loadlib() vs alien
package.loadlib()でのWin32API呼び出しは、うまくいかなかった。恐らくWin32APIの呼び出し規約がstdcallだからだろう。しかし、呼び出し規約がcdeclのprintfを呼び出しても、文字化けしてうまくいかなかった。型を指定していないからだろうか。alienを使用すると、型や呼び出し規約を指定できるので、うまくいく。
require "alien" local mb = alien.User32.MessageBoxA mb:types{ ret = 'long', abi = 'stdcall', 'long', 'string', 'string', 'long' } mb(0, "Hello, World!", "test", 64) local f = alien.msvcrt.printf f:types{ ret = 'long', abi = 'cdecl', 'string' } f("Hello, World!")