小编Ura*_*aty的帖子

将 Rc<Any> 转换为 Rc<Trait>

我正在尝试创建一个映射,其中键是TypeId特征的一个,值是实现它的结构。

impls: HashMap<TypeId, Rc<dyn Any>>
Run Code Online (Sandbox Code Playgroud)

要将新对象添加到地图中,我使用以下代码:

let type_id = TypeId::of::<dyn Trait>();
let obj_ref: Rc<dyn Any> = Rc::new(obj);

self.impls.insert(type_id, Rc::clone(&obj_ref));
Run Code Online (Sandbox Code Playgroud)

但是当我尝试从地图中获取这个对象时,我需要将其投射回来。

let any_comp_ref = self.impls
    .get(&TypeId::of::<dyn Trait>())
    .expect(&format!("Object for type: {} is not found", type_name::<dyn Trait>()));

let result: &dyn Trait = // ???
Run Code Online (Sandbox Code Playgroud)

我尝试过使用Rc::downcast. 但它仅针对Sized类型实现。

rust

5
推荐指数
0
解决办法
627
查看次数

调用dylib中的外部函数

我的主要应用程序的代码如下所示:

pub fn load_lib() {
    let dylib = libloading::Library::new("example.dylib") ...
    unsafe { *dylib.get(b"fn_in_dylib") } ...
    // calling function from dylib.
}
pub extern "Rust" fn fn_in_main_app() { ... } // Function that I want to call from dylib
Run Code Online (Sandbox Code Playgroud)

example.dylibdyliib 已成功加载,并且调用 dylib 中的函数没有任何问题。

但这是我在 dylib 中尝试做的事情:

pub extern "Rust" fn fn_in_dylib() {
    fn_in_main_app(); // Here I'm trying to call function defined in main application.
}
extern "Rust" {
    fn fn_in_main_app();
}
Run Code Online (Sandbox Code Playgroud)

但这甚至无法编译:

Undefined symbols for architecture x86_64:
    "_fn_in_main_app", referenced from: …
Run Code Online (Sandbox Code Playgroud)

dylib rust

2
推荐指数
1
解决办法
465
查看次数

标签 统计

rust ×2

dylib ×1