असल में, सभी फ़ंक्शंस पहले से ही निर्यात किए जा चुके हैं।
var ENVIRONMENT_IS_NODE = typeof process === 'object' && typeof require === 'function';
// …
if (ENVIRONMENT_IS_NODE) {
// …
module['exports'] = Module;
}
आप मिल गया तो एक समारोह अपने सी कोड में my_fun
कहा जाता है, तो आप Module._my_fun
परिभाषित करना होगा: जनरेट किया गया जावास्क्रिप्ट निम्नलिखित लाइनों में शामिल है।
हालांकि, इस दृष्टिकोण के साथ कुछ समस्याएं हैं।
अनुकूलक कुछ कार्यों को हटा या नाम बदल सकता है, इसलिए हमेशा उन्हें -s EXPORTED_FUNCTIONS="['_main','_fun_one','_fun_two']"
पास करने का निर्दिष्ट करें। सी ++ में फ़ंक्शन हस्ताक्षर थोड़ा उलझन में हैं, इसलिए extern "C" { … }
जो आप निर्यात करना चाहते हैं, उनके लिए बुद्धिमान है।
इसके अलावा, इस तरह के प्रत्यक्ष दृष्टिकोण requires JS to C type conversions। आप फ़ाइल में अभी तक एक और एपीआई परत जोड़कर --pre-js
विकल्प के साथ संलग्न जोड़ा द्वारा इसे छिपाने के लिए चाहते हो सकता है:
var Module = {
my_fun: function(some_arg) {
javascript to c conversion goes here;
Module._my_fun(converted_arg) // or with Module.ccall
}
}
Module
वस्तु बाद में सभी Emscripten-उत्पन्न उपहार के साथ बढ़ती है, तो चिंता मत करो कि यह यहाँ परिभाषित किया है , बदला हुआ नहीं।
अंत में, आप निश्चित रूप से Embind पर विचार करना चाहते हैं जो Emscripten द्वारा प्रदान किए गए अच्छे जावास्क्रिप्ट एपीआई को उजागर करने के लिए एक तंत्र है। (सबसे नया fastcomp बैकएंड अक्षम करने की आवश्यकता है।)
कुछ शोध करने के बाद मैं emscripten विकि पृष्ठ '[कोड के साथ बातचीत] पर समाधान (https://github.com/kripken/emscripten/wiki/Interacting-with-code) ', ** निर्यात का मिश्रण। ** ** पॉइंटर_स्ट्रिंगिफा ** और ** आवंटित ** कार्यों के साथ काम करता है –
lostsource
@lostsource क्या आप मुझे एक उदाहरण दिखा सकते हैं? – noamtcohen