将一个 Rust 函数返回的字符串用 FFI 调用。
2016-9-16 19:27:11
收藏:0
阅读:62
评论:2
我想让一个解释语言(特别是LuaJIT)调用一个返回字符串的Rust函数。
我的代码在我解引用指针之前就崩溃了。
我读到Rust字符串没有空终止符,所以我使用了to_c_str()函数来生成一个空终止的字符串,但是我认为生命周期在整个过程中产生了问题,因为我对它们仍然有点模糊。
Rust 代码:
#![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()
点赞
用户155423
Francis Gagné的答案是正确的。以下是完整的工作解决方案。
Rust代码:
#![crate_type = "dylib"]
extern crate libc;
#[no_mangle]
pub extern "C" fn hello_world() -> *const libc::c_char {
unsafe { "Hello World".to_c_str().unwrap() }
}
Lua代码:
local ffi = require("ffi")
ffi.cdef[[
char *hello_world();
]]
local hello_world = ffi.load("hello_world")
local hw = ffi.string(hello_world.hello_world())
2016-09-16 19:26:41
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
CString不仅是一个指针;它是一个指针加上一个布尔值,这个值指示CString是否拥有 C 字符串。因此,你 Lua 代码中的声明与 Rust 代码中的定义不匹配。通过在
CString上使用unwrap方法返回一个*const c_char或*mut c_char。如果你的函数返回一个动态分配的字符串,你还需要提供一个函数来释放该字符串,Lua 代码需要手动调用,否则将导致内存泄漏。