--- title: LuaJIT FFI和本地边界 summary: 类型,ABI兼容性以及为什么游戏构建之间不能盲目复制发现的签名. section: native kind: guide status: reference updated: 2026-10-22 tags: ["X4","modding","ffi"] sources: ["https://github.com/eg3r/X4Native"] --- ## 当需要一个原生层时 通常的XML变化和UI窗口通常不需要一个. 使用FFI或可用的自定义DLL,MD和LuaUI不能表达任务. 内部 Lua 功能,外汇货币出口和海关 Lua 模块C是不同的接口,有不同的合同. ## 宣布ABI 下面的例子说明了与相应的游戏构建使用的声明. 取得成功 `cdef` 没有证明出口可用性. `pcall` 没有错误的签名安全. 检查类型,调用X4版本的电话会议和支持. ```lua local ffi = require("ffi") if ffi.cdef then pcall(ffi.cdef, [[ bool IsGamePaused(void); bool IsStartmenu(void); ]]) end ``` ## 第三方组件 X4Native是一个独立的库,它有自己的加载器和ABI,而不是每个Lua模块的必需依赖. 声明并仅在使用时验证. 保护UI模式也影响了加载机制;禁用它并不是普通数据补丁的第一步. ## 价值类型 一个指针, `uint64_t` 且Lua号码是不可替换的. 阅读 [识别精度](wiki:ids-and-precision) 在串行化或交叉语言之前. 直接的内存抵消更依赖于构建. 在测试突变之前,建立安全的反读和对象身份.