使用 LuaJIT 的 FFI遵循MSDN 的 GetOpenFileName 示例。我已经尝试让它工作两天了,不仅对话框没有打开,而且整个事情都崩溃了。
当使用 OllyDdb 进行调试时,它会在comdlg32.dll中的某处引发丑陋的访问冲突。
这是仅包含基本代码的概念证明。如果我指定结构大小为零,它会毫无问题地退出,GetLastError()会抛出87 (ERROR_INVALID_PARAMETER)
所以我认为问题与 struct 或 FFI 有关。
如果有人能够在这里阐明一些...谢谢。
ffi = require"ffi"
bit = require"bit"
collectgarbage("stop")
ffi.cdef[[
static const int OFN_FILEMUSTEXIST = 0x1000;
static const int OFN_NOCHANGEDIR = 8;
static const int OFN_PATHMUSTEXIST = 0x800;
typedef bool BOOL;
typedef char CHAR;
typedef unsigned short WORD;
typedef unsigned long DWORD;
typedef void *PVOID;
typedef void *LPVOID;
typedef void *LPOFNHOOKPROC;
typedef unsigned long HANDLE;
typedef HANDLE HWND; …Run Code Online (Sandbox Code Playgroud)