Я очень новичок в Rust. Как я могу вернуть String
из функции Rust, которая может использоваться в Python?
Вот моя реализация Rust:
use std::ffi::CString;
#[no_mangle]
pub extern fn query() -> CString {
let s = CString::new("Hello!").unwrap();
return s;
}
И код Python, который его вызывает:
from ctypes import cdll, c_char_p
lib = cdll.LoadLibrary("target/release/libtest.so")
result = lib.query()
print(c_char_p(result).value)
Я получаю ошибку сегментации при ее запуске.
EDIT: Используя код Владимира Матвеева 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)