簡體   English   中英

如何將 C 結構傳遞給 Rust?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM