gpt4 book ai didi

ffi - const 指针的 Rust FFI 签名转换

转载 作者:行者123 更新时间:2023-11-29 08:08:59 33 4
gpt4 key购买 nike

我有一个带有函数的 C 库,在一个不透明的结构上运行,定义如下:

Foo* makeFoo(); // create a new Foo
Foo* dupFoo(const Foo* orig); // make a duplicate Foo

rust-bindgen 创建这些外部定义:

pub fn makeFoo() -> *mut Foo;
pub fn dupFoo(orig: *Foo) -> *mut Foo;

现在,我不希望以下内容起作用:

unsafe {
let x = makeFoo();
// Do some stuff with x
let y = dupFoo(x);
}

确实存在错误mismatched types: expected '*Foo' but found '*mut Foo' (values differ in mutability)

翻译这些类型的 C 函数签名的推荐方法是什么?

似乎起作用的是将参数类型更改为 *mut Foo,即使当 C 函数使用 const 时也是如此,或者使用 transmute:

unsafe {
let x = makeFoo();
// Do some stuff with x
let cx: *Foo = mem::transmute(x);
let y = dupFoo(cx);
}

但我不知道哪个更好。

最佳答案

*T*mut T 彼此没有区别;它们只是作为意图的指标存在。您可以在它们之间自由转换:x as *Foo

关于ffi - const 指针的 Rust FFI 签名转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23795314/

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