有什麼方法可以訪問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與包含導入的「空」模塊? –