से वेबसाइस्प्लोर में एक सी स्टाइल फ़ंक्शन पॉइंटर को कॉल करना क्या 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
के एक कार्यान्वयन के लिए एक मध्यस्थ सी समारोह निर्यात पर भरोसा करने की वास्तविक समारोह कॉल करने के लिए बिना कॉलबैक आह्वान कर सकते हैं ?
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();
}
फिर जावास्क्रिप्ट set_callback
समारोह प्रतिनिधि do_callback
समारोह के माध्यम से समारोह सूचक कॉल कर सकते हैं।
function set_callback(callbackptr, argptr) {
instance.exports.do_callback(callbackptr, argptr);
}
लेकिन, यह है कि स्पष्ट अविवेक के माध्यम से जाने के बिना यह करने के लिए प्राथमिकता दी जाती है, यह संभव है, कार्य तालिकाओं शायद के साथ?
यह पहले से ही के रूप में कार्य तालिकाओं का वर्णन मूल रूप से के रूप में लिखा है "यह एक समारोह सूचक तालिका, इस्तेमाल होता है की कोशिश की है यह सी स्टाइल फ़ंक्शन पॉइंटर्स के लिए "लेकिन मॉड्यूल के आयात डिस्क्रिप्टर को टेबल पास करने का कोई प्रभाव नहीं पड़ता है, और तालिका खाली हो जाती है? –
@ कैस्परबेयर मैंने अपनी पोस्ट को उस उदाहरण के उदाहरण को संपादित करने के लिए संपादित किया है जिसका उपयोग मैंने परीक्षण करने के लिए किया था। – Ghillie
ईएमएसस्क्रिप्टन के बिना टेबल और मेमोरी के लिए आयात उत्पन्न करने के लिए मुझे क्लैंग कैसे मिलेगी? इसे लिंकर स्तर पर करें? उदाहरण के साथ एक "खाली" मॉड्यूल के साथ wasm-link? –