我如何在lua运行一个可执行的FFI



由于我无法在当前项目中使用os.execute(),但我可以使用LuaJIT的FFI中的所有内容,并且我不理解c/c++,我想知道如何使用FFI 执行和.exe文件

local ffi = require("ffi")
ffi.cdef[[
typedef struct _STARTUPINFOA {
uint32_t  cb;
void *    lpReserved;
void *    lpDesktop;
void *    lpTitle;
uint32_t  dwX;
uint32_t  dwY;
uint32_t  dwXSize;
uint32_t  dwYSize;
uint32_t  dwXCountChars;
uint32_t  dwYCountChars;
uint32_t  dwFillAttribute;
uint32_t  dwFlags;
uint16_t  wShowWindow;
uint16_t  cbReserved2;
void *    lpReserved2;
void **   hStdInput;
void **   hStdOutput;
void **   hStdError;
} STARTUPINFOA, *LPSTARTUPINFOA;
typedef struct _PROCESS_INFORMATION {
void **  hProcess;
void **  hThread;
uint32_t dwProcessId;
uint32_t dwThreadId;
} PROCESS_INFORMATION, *LPPROCESS_INFORMATION;
uint32_t CreateProcessA(
void *,
const char * commandLine,
void *,
void *,
uint32_t,
uint32_t,
void *,
const char * currentDirectory,
LPSTARTUPINFOA,
LPPROCESS_INFORMATION
);
uint32_t CloseHandle(void **);
]]
local function execute(commandLine, currentDirectory)
local si = ffi.new"STARTUPINFOA"
si.cb = ffi.sizeof(si)
local pi = ffi.new"PROCESS_INFORMATION"
local ok = ffi.C.CreateProcessA(nil, commandLine, nil, nil, 0, 0, nil, currentDirectory, si, pi) ~= 0
if ok then
ffi.C.CloseHandle(pi.hProcess)
ffi.C.CloseHandle(pi.hThread)
end
return ok  -- true/false
end
execute[["C:WINDOWSsystem32notepad.exe" "some file.txt"]]
if not execute[["C:Program FilesMicrosoft GamesMinesweeperMineSweeper.exe"]] then
print"Can not find the game"
end

相关内容

最新更新