【发布时间】:2019-06-15 11:11:20
【问题描述】:
编辑:有人指出我的示例不够完整,无法使用。我的问题已解决,但如果您有兴趣查看完整代码,可以查看here。
给定以下代码:
#[no_mangle]
pub extern "C" fn create_acceptor() -> Acceptor {
Acceptor {}
}
pub struct Acceptor {}
如果我从 C 中调用它,它实际上会得到什么?是指针吗?某种 id?
我目前在 C 端使用如下代码:
extern int create_acceptor();
int main(int argc, char **argv) {
int acceptor = create_acceptor();
return 0;
}
它似乎工作正常。我把它当作一个不透明的类型来使用,我会像acceptor_doSomething(acceptor) 一样将它传回Rust。
但我很困惑,因为我在 C 端为 acceptor 使用什么类型似乎并不重要。 void* 和 int 的行为相同。此外,文档似乎表明我应该使用#[repr(C)],但没有它似乎也可以工作。这是为什么呢?
在打印 C 端接收到的值时,它显示的整数非常小,所以我猜它是 Rust 端的 id?
【问题讨论】:
-
空类型在 C 中不是一个东西,也返回一个空类型对我来说没有多大意义,但是
void在大多数情况下应该“工作”。但是int没有任何意义,锈空类型都是空的。 -
是的,抱歉这不是一个很好的例子。我编辑了指向我的实际代码的链接。反正我的问题已经回答了。