我有一个使用 WASI SDK 编译的简单函数,旨在接收一个函数指针以传递给另一个 C 库,该库应该在以后调用它(并具有任意签名):
__attribute__((export_name("add_func")))
void add_func(void* func) {
// pass func to some other API expecting void*
}
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 中的索引)。