![]() |
1
14
要将Rust对象发送到C:#[no_mangle] pub extern "C" fn create_foo() -> *mut Foo { Box::into_raw(Box::new(Foo)) }
或利用
(返回
向C借款(而非免费):#[no_mangle] pub unsafe extern "C" fn peek_at(foo: *mut Foo) { let foo = foo.as_ref().unwrap(); // That's ptr::as_ref }
或利用参考文献和
要接收/销毁先前给C的Rust对象:#[no_mangle] pub unsafe extern "C" fn free_foo(foo: *mut Foo) { assert!(!foo.is_null()); Box::from_raw(foo); // Rust auto-drops it }
或者利用以下事实
|
![]() |
2
10
事实上,你 没有 设法将一个对象泄漏给C;您已经设法泄漏了对(不久)不存在的堆栈帧的引用。:D 这里有一个完整的示例,应该可以正确工作。我试着对它进行适当的评论,以解释我在做什么以及为什么。
|
![]() |
Community wiki · C中有哪些耗时的操作? 1 年前 |
![]() |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
![]() |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
![]() |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |