--- title: LuaJIT FFI y el límite nativo summary: Tipos, compatibilidad ABI y por qué una firma encontrada no puede ser copiada ciegamente entre las construcciones del juego. section: native kind: guide status: reference updated: 2026-10-22 tags: ["X4","modding","ffi"] sources: ["https://github.com/eg3r/X4Native"] --- ## Cuando se necesita una capa nativa Los cambios XML ordinarios y las ventanas de la UI generalmente no necesitan uno. Use FFI o un DLL personalizado cuando esté disponible MD y Lua UI no pueden expresar la tarea. Las funciones Lua incorporadas, las exportaciones de FFI y los módulos C Lua personalizados son diferentes en virtud de diferentes contratos. ## Declarando la ABI El ejemplo siguiente ilustra las declaraciones utilizadas con la correspondiente compilación de juegos. `cdef` no demuestra la disponibilidad de las exportaciones. `pcall` no hace una firma incorrecta segura. Verifique los tipos, llamando a la convención y soporte en su propia versión X4. ```lua local ffi = require("ffi") if ffi.cdef then pcall(ffi.cdef, [[ bool IsGamePaused(void); bool IsStartmenu(void); ]]) end ``` ## Componentes de terceros X4Native es una biblioteca separada con cargador propio y ABI, no una dependencia requerida para cada mod de Lua. Declararlo y verificarlo sólo cuando se utiliza. El modo protegido de UI también afecta a los mecanismos de carga; desactivarlo no es el primer paso para un parche de datos ordinario. ## Tipos de valor Un puntero, `uint64_t` y el número Lua no son intercambiables. Leer [Precisión del ID](wiki:ids-and-precision) Los ajustes de memoria directa dependen aún más fuertemente de la construcción. Establezca una readback segura y una identidad de objeto antes de probar una mutación.