测试 Rust 的外部“C”回调函数

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

我正在查看用 Rust 编写的 C API,并使用回调函数。实现模式如下

type FooCallback = extern "C" fn(data: &FooData, context: FooContext);

trait FooCallbackExt {
    fn call(&self, data: FooData, context: FooContext);
}

impl FooCallbackExt for FooCallback {
    fn call(&self, data_in: FooData, context: FooContext) {
        // Doing cool things
    }
}

我可以通过创建如下回调函数从 C 端测试这一点:

void callback(const FooData* data, FooContext context)

现在我也想从 Rust 端测试这个接口,尽可能接近公开的 C 接口,以隔离我认为在 Rust 中发生的问题。

获取此数据的 Rust 函数如下所示:

fn foo(&mut self, callback: FooCallback, context: FooContext)
但我对如何从 Rust 端创建回调感到困惑。

我需要在中间创建某种类型的转换器或层吗?或者我可以创建回调的 Rust 类型版本,但让它们都使用相同的特征吗?

rust
1个回答
0
投票

您可以轻松创建像 Rust 中那样的回调函数,如下所示:

extern "C" fn bar(data: &FooData, context: FooContext) {
    // whatever
}
© www.soinside.com 2019 - 2024. All rights reserved.