[英]How to pass a C Struct to Rust?
I've found https://rust-embedded.github.io/book/interoperability/c-with-rust.html which teaches how to pass a C Struct to Rust. 但是,它使用 cty crate,它必须由某种脚本生成。
我想更轻松地做事情,因为我需要通过的事情很少。 只是一些字符串( char*
)和数字。
我已经成功地将单个uint8_t
从 C 传递到 Rust。
我现在在 Rust 端尝试这个:
#[repr(C)]
pub struct VPNParameters {
pub address: *mut c_char,
pub address_size: usize,
pub x: c_int,
}
#[no_mangle]
pub extern "C" fn passParameters(vpnParameters: *mut VPNParameters)
{
//error: says "vpnParameters" has no address field
println!("{}", vpnParameters.address);
}
在 C++ 上:
struct VPNParameters {
char* address;
size_t address_size;
int x;
} VPNParameters;
extern "C" void passParameters(VPNParameters* vPNParameters);
我认为是这样的。 但是为什么我无法访问 Rust 上的结构成员? 而且可能它也不起作用,我可能需要将 char 转换为字符串。
我想这会起作用:
println!("{}", unsafe { *vPNParameters.address(i as isize) });
指针本身没有address
字段。 要“到达”指向的结构,您需要取消引用指针。
#[repr(C)]
pub struct VPNParameters {
pub address: *mut libc::c_char,
pub address_size: usize,
pub x: libc::c_int,
}
#[no_mangle]
pub extern "C" fn passParameters(vpnParameters: *mut VPNParameters)
{
// Note the asterisk operator
println!("{:?}", unsafe { (*vpnParameters).address });
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.