代码之家  ›  专栏  ›  技术社区  ›  IS4

如何将函数传递给WebAssembly?

  •  0
  • IS4  · 技术社区  · 3 年前

    我有一个使用 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中的索引)。

    0 回复  |  直到 3 年前
    推荐文章