本文主要是介绍Rust FFI 编程 - 手动绑定 C 库入门 06,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在 C 端有个函数,有个回调函数作为参数;
在 Rust 端,有个闭包;并在主函数中,要使用定义的闭包调用 C 端的那个函数。
闭包
我们知道 Rust 的闭包不仅是一个函数指针,这意味着不能使用它作为回调函数的函数指针直接传递给 C 端。
同时我们也知道 Rust 中的所有的闭包都实现了由标准库提供的 trait Fn
、FnMut
或 FnOnce
中的一个。闭包语法 || {}
实际上是 Fn
系列 trait 的语法糖,Rust 会为“环境”创建一个结构体,impl
其中合适的一个 trait,并使用它。
因此,从理论上讲,我们应该能够通过将闭包“拆分”为两部分,匿名类型的实例数据和某种类似call()
方法的函数。这样我们可以获取其中函数部分的指针,从而实现将闭包传递给 C 端代码。
具体的方法就是:首先创建一个泛型 hook 函数,该函数和回调函数的参数列表一样,在其中构建并调用闭包。然后创建一个 getter 函数,该函数接受闭包的引用作
这篇关于Rust FFI 编程 - 手动绑定 C 库入门 06的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!