我正在尝试编写一个与C兼容的API。对于这个特定的调用,我希望返回一个错误代码并接收一个指针,如果没有抛出错误,则指向将创建的结构。
下面是我编译的代码:
pub extern "C" fn create_engine(mut _qe_ptr: *mut Engine) -> c_int {
let engine_res = Engine::new();
match engine_res {
Ok(v) => {
_qe_ptr = Box::into_raw(Box::new(v));
return 0;
}
Err(e) => {
println!("Error creating engine {:#?}", e);
return 1;
}
}
}
字符串
Engine也是C和Rust之间的一个共享结构体,所以如果我从调用中返回一个*mut Engine
指针,一切都很好。
在调用完成后,调用C代码的指针上仍然有NULL。有什么方法可以实现这一点吗?
Engine *qe;
int res = create(qe);
if (res != 0) {
throw std::runtime_error("Failed to create engine");
}
型
1条答案
按热度按时间pxq42qpu1#
我找到了答案。在再次阅读some documentation并理解
*mut p
等效于Cs*p
并查看it would be done in pure C如何之后,我明白了我试图重新重写指针而不是更改指针值。正确的答案将是一个指针指向一个指针,然后可以被覆盖:
字符串