Rust静态函数fn指针,要初始化哪个值?

问题描述 投票:0回答:1

我正在尝试创建一个可从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的新人。

c rust
1个回答
0
投票

您应该将其包装在Option中,并使用None对其进行初始化。

static mut onDataCallback_: Option<OnDataCallback> = None;
© www.soinside.com 2019 - 2024. All rights reserved.