rust Wasmer主机功能访问内存

a7qyws3x  于 2023-11-19  发布在  其他
关注(0)|答案(1)|浏览(91)

我有一个使用wasmer_runtime的项目,我试图更新它只是为了使用Wasmer。
我在主机函数中遇到了内存访问问题。以前,我有以下几个问题:

fn hostFun(ctx:&mut wasmer_runtime::Ctx, ...) -> ... {
       ...
       let memory = ctx.memory(0);
       let data = memory.view()[index];
       ...
    }

字符串
然而,据我所知,在wasmer中,函数只能接收自定义环境,而不能访问上下文。此外,在我必须定义自定义环境(导入部分)的地方,内存还不存在,因为需要导入部分来创建提供内存的 Instance。在wasmer中,从主机函数访问内存的首选方法是什么?

bsxbgnwa

bsxbgnwa1#

正如在注解中已经建议的那样,您可以通过创建一个包含内存的环境并将其传递给函数来实现这一点。

struct Env {
    memory: Option<Memory>,
}

fn hostFn(mut env: FunctionEnvMut<Env>, ...) {
    let (env_data, store) = env.data_and_store_mut();
    let memory_view = env_data.memory.unwrap().view(&store);
    ...
}

let mut store = Store::default();
let env = FunctionEnv::new(&mut store, Env { memory: None });
let imports = imports! {
    "env" => {
        "hostFn" => Function::new_typed_with_env(&mut store, &env, hostFn),
    }
};

let instance = Instance::new(&mut store, &module, &import_fns).unwrap();
let memory = instance.exports.get_memory("memory").unwrap().clone();
env.as_mut(&mut store).memory = Some(memory);

字符串

相关问题