有什么方法可以访问WebAssembly模块内部的函数指针吗?从JavaScript调用WebAssembly中的C风格函数指针
例如,给出下面的“模块”编译WebAssembly:
extern void set_callback(void (*callback)(void *arg), void *arg);
static void callback(void *arg)
{
/* ... */
}
int main() {
set_callback(&callback, 0);
return 0;
}
的do_callback
在JavaScript中实现可调用回调函数,而不必依赖中介C函数出口做实际的函数调用?
var instance = new WebAssembly.Instance(module, {
memory: /* ... */
env: {
set_callback: function set_callback(callbackptr, argptr) {
// We only got the pointer, is there any
},
},
});
通过中间函数导出,我的意思是我可以添加一个公共可见性的内部函数。
do_callback(void (*callback)(void *arg), void *arg)
{
callback();
}
然后JavaScript的set_callback
功能可以通过委托do_callback
函数调用的函数的指针。
function set_callback(callbackptr, argptr) {
instance.exports.do_callback(callbackptr, argptr);
}
但是,最好做到这一点,而不必经过明确的间接,是否有可能,功能表也许呢?
尝试这个已经作为函数表的描述基本上是读作“这是一个函数指针表,使用它适用于C风格函数指针“,但将表传递给模块的导入描述符没有明显效果,并且表最终为空? –
@CasperBeyer我编辑了我的文章,包括我用来测试这个工作示例。 – Ghillie
如何让clang为没有Emscripten的表和内存生成导入?在链接器级别执行它?例如wasm-link与包含导入的“空”模块? –