【发布时间】:2014-06-12 18:15:38
【问题描述】:
我正在努力通过一个接受 void 的 FFI 传递一个结构并在另一端读回它。
有问题的库是 libtsm,一个终端状态机。它允许您输入输入,然后找出终端在输入之后的状态。
它把它的draw函数声明为:
pub fn tsm_screen_draw(con: *tsm_screen, draw_cb: tsm_screen_draw_cb, data: *mut c_void) -> tsm_age_t;
其中 tsm_screen_draw_cb 是由库用户实现的回调,带有签名:
pub type tsm_screen_draw_cb = extern "C" fn(
con: *tsm_screen,
id: u32,
ch: *const uint32_t,
len: size_t,
width: uint,
posx: uint,
posy: uint,
attr: *tsm_screen_attr,
age: tsm_age_t,
data: *mut c_void
);
这里的重要部分是data 参数。它允许用户通过一个指向自我实现状态的指针,在绘制后对其进行操作和使用。给定一个简单的结构:
struct State {
state: int
}
我该如何正确地做到这一点?我不确定如何正确地将指向结构的指针转换为 void 并返回。
【问题讨论】: