我对Rust很新.我如何String从可以在Python中使用的Rust函数返回一个?
这是我的Rust实现:
use std::ffi::CString;
#[no_mangle]
pub extern fn query() -> CString {
let s = CString::new("Hello!").unwrap();
return s;
}
Run Code Online (Sandbox Code Playgroud)
以及调用它的Python代码:
from ctypes import cdll, c_char_p
lib = cdll.LoadLibrary("target/release/libtest.so")
result = lib.query()
print(c_char_p(result).value)
Run Code Online (Sandbox Code Playgroud)
它运行时出现分段错误.
编辑:使用下面的Vladimir Matveev的Rust代码,我能够使用我的python代码的更改:
from ctypes import *
lib = cdll.LoadLibrary("target/release/libtest.so")
lib.query.restype = c_char_p
result = lib.query()
print cast(result, c_char_p).value
lib.free_query(result)
Run Code Online (Sandbox Code Playgroud)