【发布时间】:2020-05-11 02:56:32
【问题描述】:
我正在尝试创建一个可从 C 调用的 Rust 库:
use std::os::raw::{c_int};
type OnDataCallback = unsafe extern "C" fn(data: *mut u8, len: usize) -> c_int;
static mut onDataCallback_: OnDataCallback = std::ptr::null();
#[no_mangle]
pub extern "C" fn registerOnDataCallback(
data: *const u8, len: usize,
cb: Option<OnDataCallback>) -> c_int
{
onDataCallback_ = cb.unwrap();
return 0;
}
#[no_mangle]
pub extern "C" fn doSomething()
{
unsafe{onDataCallback_(mut "hello world" , 100)};
}
但我得到了:
--> interface.rs:5:46
|
5 | static mut onDataCallback_: OnDataCallback = std::ptr::null();
| ^^^^^^^^^^^^^^^^ expected fn pointer, found *-ptr
|
= note: expected fn pointer `unsafe extern "C" fn(*mut u8, usize) -> i32`
found raw pointer `*const _`
我不知道该放什么作为初始值。我不能让它没有一个,我不能放空。我应该放什么?
PS:如果我正在做的是一种不好的做法,请给我一个好的做法。我是 Rust 的新手。
【问题讨论】:
-
我认为不可能做到这一点。也许像play.rust-lang.org/…