有什么方法可以访问 WebAssembly 模块中的函数指针?
例如,给定以下编译为 WebAssembly 的“模块”:
extern void set_callback(void (*callback)(void *arg), void *arg);
static void callback(void *arg)
{
/* ... */
}
int main() {
set_callback(&callback, 0);
return 0;
}
JavaScript 中的实现是否可以do_callback
调用回调而不必依赖中间 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();
}
然后 JavaScriptset_callback
函数可以通过委托do_callback
函数调用函数指针。
function set_callback(callbackptr, argptr) {
instance.exports.do_callback(callbackptr, argptr);
}
但是,最好不要通过显式间接执行此操作,是否可以使用函数表?