如何将函数传递给 WebAssembly?

问题描述 投票:0回答:0

我有一个使用 WASI SDK 编译的简单函数,旨在接收一个函数指针以传递给另一个 C 库,该库应该在以后调用它(并具有任意签名):

__attribute__((export_name("add_func")))
void add_func(void* func) {
    // pass func to some other API expecting void*
}

WASM模块是通过

wasmtime-dotnet
加载和执行的,在这里我想动态创建任意数量的函数并将它们传递给
add_func
,方式如下:

Instance inst = ...;
var add_func = inst.GetAction<Function>("add_func");
add_func(Function.FromCallback(_store, (caller, arguments, results) => {
   ...
});

但是,

inst.GetAction<Function>
返回
null
,检索和调用此函数的唯一方法似乎是使用
int
参数,如
GetAction<int>
.

如何将以这种方式创建的函数传递给 WASM?我找不到任何方法来更改函数的签名以允许 funcref 参数,或获取创建的函数的索引(我认为函数指针无论如何都是 WASM 中的索引)。

c# c .net webassembly wasmtime
© www.soinside.com 2019 - 2024. All rights reserved.