Я хочу, чтобы интерпретируемый язык (в частности, LuaJIT) вызывал функцию Rust, возвращающую строку.
То, что у меня происходит, вылетает еще до того, как я разыменую указатель.
Я читал, что строки Rust не заканчиваются нулем, поэтому я использую функцию to_c_str()
, чтобы создать строку, которая есть, но я полагаю, что время жизни каким-то образом мешает всему этому, поскольку я все еще немного не уверен в них.
Код ржавчины:
#![crate_type = "dylib"]
extern crate libc;
#[no_mangle]
pub extern "C" fn hello_world() -> std::c_str::CString {
"Hello World".to_c_str()
}
Код Lua:
local ffi = require("ffi")
ffi.cdef[[
char *hello_world();
]]
local hello_world = ffi.load("hello_world")
local hw = hello_world.hello_world()