我有一个非常基本的Rust函数,可以成功编译:
use std;
use std::ffi::CString;
use std::os::raw::c_char;
#[no_mangle]
pub extern "C" fn string_from_rust() -> [*const c_char; 2] {
let s = CString::new("Hello").unwrap();
let t = CString::new("World").unwrap();
let p = s.as_ptr();
let w = t.as_ptr();
std::mem::forget(s);
std::mem::forget(t);
[p, w]
}
在我的C头文件中,我包含了
#include <stdint.h>
extern char * string_from_rust();
string_from_rust()
只返回 "Hello",所以我似乎在做错了什么,可能是在 C 语言中,只允许 Rust 数组的第一个元素被传递给 C。