gpt4 book ai didi

c - 如何将C结构传递给Rust?

转载 作者:行者123 更新时间:2023-12-03 11:43:10 26 4
gpt4 key购买 nike

我发现https://rust-embedded.github.io/book/interoperability/c-with-rust.html教如何将C结构传递给Rust。但是,它使用cty crate ,该 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上访问struct成员呢?而且可能也不起作用,我可能需要将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 });
}

关于c - 如何将C结构传递给Rust?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62126501/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com