मैं एम्सस्क्रिप्ट/जावास्क्रिप्ट के साथ-साथ इस ओवरस्टैक समुदाय के लिए नया हूं। मैं क्षमा चाहता हूं, अग्रिम में, अगर मेरी स्थिति को पहले ही संबोधित किया जा चुका है।emscripten संकलित कोड में गुजरने/लौटने वाले सरणी पॉइंटर्स को कैसे संभालें?
विंडोज 7 वातावरण से, मैंने एक सरल सी प्रोग्राम संकलित करने के लिए एमसीसी का उपयोग किया है जो एक सरणी स्वीकार करता है और इसे संशोधित करता है (नीचे देखें)।
double* displayArray(double *doubleVector) {
for (int cnt = 0; cnt < 3; cnt++)
printf("doubleVector[%d] = %f\n", cnt, doubleVector[cnt]);
doubleVector[0] = 98;
doubleVector[1] = 99;
doubleVector[2] = 100;
for (int cnt1 = 0; cnt1 < 3; cnt1++)
printf("modified doubleVector[%d] = %f\n", cnt1, doubleVector[cnt1]);
return doubleVector;
}
int main() {
double d1, d2, d3;
double array1[3];
double *array2;
array1[0] = 1.00000;
array1[1] = 2.000000;
array1[2] = 3.000000;
array2 = displayArray(array1);
for (int cntr =0; cntr < 3; cntr++)
printf("array1[%d] = %f\n", cntr, array1[cntr]);
for (int cnt = 0; cnt < 3; cnt++)
printf("array2[%d] = %f\n", cnt, array2[cnt]);
return 1;
}
EMCC के लिए -ओ विकल्पों का उपयोग करना, मैं एक .html फ़ाइल जो मैं एक ब्राउज़र (क्रोम) को लोड उत्पन्न।
python emcc displayArray7.c -o displayArray7.html -s EXPORTED_FUNCTIONS="['_main', '_displayArray'
लोड होने पर, मुझे लगता है कि ब्राउज़र विंडो में उत्पन्न होने वाला आउटपुट अपेक्षित है (नीचे देखें)।
doubleVector[0] = 1.000000
doubleVector[1] = 2.000000
doubleVector[2] = 3.000000
modified doubleVector[0] = 98.000000
modified doubleVector[1] = 99.000000
modified doubleVector[2] = 100.000000
array1[0] = 98.000000
array1[1] = 99.000000
array1[2] = 100.000000
array2[0] = 98.000000
array2[1] = 99.000000
array2[2] = 100.000000
हालांकि, जब module.cwrap का उपयोग कर() के माध्यम से आदेश JavaScript कंसोल और सीधे समारोह आह्वान करने के लिए प्रयास करने से (के बाहर मुख्य()),
> displayArray=Module.cwrap('displayArray', '[number]', ['[number]'])
> result = displayArray([1.0,2.0,3.0])
[1, 2, 3]
> result
[1, 2, 3]
मैं देख रहा हूँ जेनरेट किए जाने के निम्नलिखित/ब्राउज़र में प्रदर्शित किया गया है जो मैं नहीं देख सकता हूं।
doubleVector[0] = 0.000000
doubleVector[1] = 0.000000
doubleVector[2] = 0.000000
modified doubleVector[0] = 100.000000
modified doubleVector[1] = 100.000000
modified doubleVector[2] = 100.000000
मैं निम्नलिखित प्रश्न हैं:
मैं वाक्य रचना वापसी प्रकार और पैरामीटर Module.cwrap करने के लिए अपने कॉल में सही लिस्टिंग() के लिए सही है? मैंने int_sqrt() को ट्यूटोरियल के "कोड के साथ इंटरैक्टिंग" अनुभाग में int_sqrt() का सरल, सीधा-आगे उदाहरण चलाया है जो int_sqrt() दिनचर्या में गैर-पॉइंटर चर को गुजरने से संबंधित है।
क्या ऐसा कुछ अलग हो रहा है जब सरणी और/या पॉइंटर्स emscripten- जेनरेट किए गए जावास्क्रिप्ट कोड (या से लौटाए गए) हो?
फ़ंक्शन के ब्राउज़र में जेनरेट आउटपुट, displayArray(), मुख्य() से कॉल किए जाने पर काम करता है (अपेक्षित); लेकिन जावास्क्रिप्ट कंसोल के माध्यम से नहीं?
मैं ईएमएसस्क्रिप्ट/जावास्क्रिप्ट के लिए नया हूं इसलिए किसी भी जानकारी/सहायता की सराहना की जाएगी।
धन्यवाद,
एफसी
बहुत उपयोगी जवाब। मुझे बाल खींचने के घंटों बचाता है। धन्यवाद। – scai
वास्तव में बहुत उपयोगी है, लेकिन "आसपास के दूसरे तरीके" के बारे में क्या? आप सी कोड से सरणी को कैसे संशोधित कर सकते हैं और इसे जावास्क्रिप्ट में उपयोग कर सकते हैं? – gromit190
मुझे एक 'मॉड्यूल.मॉलोक() 'लेकिन कोई' मॉड्यूल.फ्री()' नहीं है? क्या यह जेएस के जीसी द्वारा संभाला जाता है? – Nikkolasg