Значение#

Дополнительный тип LuaJIT для указателей, структур и C-чисел. ffi.string копирует C-строку в Lua string; ffi.cast меняет представление типа, но не доказывает валидность адреса. Срок жизни памяти нужно устанавливать отдельно.

Пример#

LUA
local ffi = require("ffi")
local value = ffi.new("uint64_t", 42)
local kind = type(value) -- cdata
local bytes = ffi.sizeof(value)

Что произойдёт: value содержит uint64_t со значением 42; kind = "cdata"; bytes = 8.

Этот фрагмент не печатает сообщение и не пишет его в журнал. Здесь указаны ожидаемые значения примера.

Методы и связанные вызовы#

Функция Возвращает Назначение
ffi.cast cdata Создаёт скалярное cdata заданного C-типа через преобразование. Валидность адреса этим не проверяется.
ffi.cdef none Объявляет C-типы и сигнатуры для FFI. Это не загрузка библиотеки и не реализация функции.
ffi.copy none Копирует байты в подготовленный буфер. Без длины допустима строка Lua: копируется также нулевой терминатор.
ffi.new cdata Выделяет и инициализирует cdata. Размер обязателен только для массивов или структур переменной длины.
ffi.sizeof number | nil Возвращает размер C-типа или cdata в байтах; размер неизвестного типа может быть nil.
ffi.string string Копирует данные C-указателя в строку Lua. Без длины читает до нулевого байта.