Был разрешен в текущей версии LLVM.
ли способ получить доступ к указателям на функции, живущим в модуле 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;
}
Может ли реализация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();
}
Тогда JavaScriptset_callback
функция может вызывать указатель на функцию через делегатаdo_callback
функция.
function set_callback(callbackptr, argptr) {
instance.exports.do_callback(callbackptr, argptr);
}
Но предпочтительно делать это без необходимости проходить через это явное косвенное обращение, возможно, с таблицами функций?