LuaJit FFI возвращает строку из функции C в Lua?


Скажем, у меня есть такая функция C:

__declspec(dllexport) const char* GetStr()
{
    static char buff[32]

    // Fill the buffer with some string here

    return buff;
}

И этот простой модуль Lua:

local mymodule = {}

local ffi = require("ffi")

ffi.cdef[[
    const char* GetStr();
]]

function mymodule.get_str()
    return ffi.C.GetStr()
end

return mymodule

Как я могу получить возвращенную строку из функции C в виде строки Lua здесь:

local mymodule = require "mymodule"

print(mymodule.get_str())
1 3

1 ответ:

ffi.string функция, по-видимому, выполняет преобразование, которое вы ищете.

function mymodule.get_str()
    local c_str = ffi.C.GetStr()
    return ffi.string(c_str)
end

Если вы получаете сбой, то убедитесь, что ваша строка C завершается null и в вашем случае имеет не более 31 символа (чтобы не переполнять буфер).