그것은이다 그대로 나를 위해, 기회가 밖으로 외국인 테스트 할 수있는 좋은 질문 ... 당신이 괜찮다면
, 나는 외국인 사용하는 방법에 대해 설명 할 수있는 기회를, 그래서이 스레드에 걸림돌이 걸리는 나 같은 사람들은 (require
에 익숙하지 않다.)
당신은 LuaForge 페이지에 대한 링크를 제공하고 거기에 가서 내가 그것을 얻기 위해 루아 록이 필요하다는 것을 알았다. :-( 나는 언젠가 후자를 설치해야한다. 그러나 나는 지금 그걸 건너 뛰기로 선택했다. 그래서 나는 저장소에 가서 alien-0.4.1-1.win32-x86.rock을 다운로드했다. 평소와 같이 압축을 풀 수있는 일반 Zip 파일이라는 것을 알게되었다.
는 require
으로 조금 멍청이 후, 나는 빠른 테스트를 위해 루아 스크립트의 경로를 해킹했다. 내가 대신 내 환경에서 LUA_PATH
및 LUA_CPATH
를 만들어야합니다, 나는 나중에 할 것입니다.
그래서 나는 외계인했다. lua, core.dll 및 struct.dll을 압축 해제 한 폴더에서 가져 와서 공용 라이브러리 저장소에 Alien이라는 디렉토리에 넣습니다.
그리고 f 내 스크립트의 시작 라인을 따르게 (나쁜 해킹 경고!) : 메시지 박스 :
package.path = 'C:/PrgCmdLine/Tecgraf/lib/?.lua;' .. package.path
package.cpath = 'C:/PrgCmdLine/Tecgraf/lib/?.dll;' .. package.path
require[[Alien/alien]]
가 그럼 난 즉각적인 시각적 결과 단순, 노 하지요이 기능을 시도했다.
local mb = alien.User32.MessageBoxA
mb:types{ 'long', 'long', 'string', 'string', 'long' }
print(mb(0, "Hello World!", "Cliché", 64))
예, 메시지 상자가 있습니다. 하지만 확인을 클릭하면 Lua가 고장났습니다. 아마도 당신을 좋아할 것입니다. 외국인 문서를 빠르게 스캔 한 후, 나는 (익명의) 범인을 발견 :
mb:types{ ret = 'long', abi = 'stdcall', 'long', 'string', 'string', 'long' }
그래서 작동하기 위해 전화를 걸 사소한했다 : 우리는 윈도우 API에 대한 stdcall을 호출 규칙을 사용합니다 : 나는 EEV 호출에서 버퍼 매개 변수를 넣어
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 용 Lua (http://luaforwindows.luaforge.net/)도 사용할 수 있습니다. 그것은 상자에서 일하는 외계인과 함께 제공됩니다. – Jazz
예,하지만 좋은 패키지이지만, "모든 배터리 포함"철학을 좋아하지 않아 파이썬보다 더 큰 다운로드가 발생합니다 ... – PhiLho