पर तर्क के रूप में पास करें, मैं कुछ जटिल सरणी गणनाओं के लिए WebAssembly का परीक्षण करना चाहता हूं।एक जावास्क्रिप्ट सरणी को WebAssembly फ़ंक्शन
// hello.cpp
extern "C" {
void array_add(int * summed, int* a, int* b) {
for (int i=0; i < 3; i++) {
summed[i] = a[i] + b[i];
}
}
}
और के साथ इस संकलित:
emcc hello.cpp -s WASM=1 -s "MODULARIZE=1" -s "EXPORT_NAME='HELLO'" -s "BINARYEN_METHOD='native-wasm'" -s "EXPORTED_FUNCTIONS=['_array_add']" -o build/hello.js
कौन सा दूसरों के बीच उत्पन्न करता है, एक js
तो मैं एक साधारण सी ++ समारोह 3 तत्वों से युक्त दो int
सरणियों जोड़ने लिखा है और wasm
फ़ाइल। मैं निम्नलिखित html पृष्ठ के साथ इन लोड:
<!doctype html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<script type="text/javascript" src="build/hello.js"></script>
<script type="text/javascript">
function reqListener() {
// Loading wasm module
var arrayBuffer = oReq.response
HELLO['wasmBinary'] = arrayBuffer
hello = HELLO({ wasmBinary: HELLO.wasmBinary })
// Calling function
var result = new Int32Array(3)
var a = new Int32Array([1, 2, 3])
var b = new Int32Array([4, 5, 2])
hello._array_add(result, a, b)
console.log('result', result)
}
var oReq = new XMLHttpRequest();
oReq.responseType = "arraybuffer";
oReq.addEventListener("load", reqListener);
oReq.open("GET", "build/hello.wasm");
oReq.send();
</script>
</head>
<body>
</body>
</html>
लेकिन किसी भी तरह, result
सरणी हमेशा [0, 0, 0]
है।
मैं (emscripten docs देखें) ccall()
साथ फ़ंक्शन को कॉल और ऐसा लगता है कि मैं एक सरणी मेरी Wasm संकलित समारोह के तर्क के रूप में पारित नहीं प्राप्त कर सकते हैं सहित चीजों की एक किस्म की कोशिश की है।
उदाहरण के लिए, निम्नलिखित सी ++ समारोह के साथ:
extern "C" {
int first(int * arr) {
return arr[0];
}
}
परिणाम जब जावास्क्रिप्ट में बुलाया सरणी मैं तर्क के रूप में पारित कर दिया से उम्मीद मान की बजाय एक यादृच्छिक-ish पूर्णांक है।
मुझे क्या याद आ रही है?
नायब: मैं सी के बारे में ++ काफी कुछ भी नहीं पता है, इसलिए सभी क्षमा याचना अगर यह अभी शुरुआत मेरी सी ++ अज्ञान से संबंधित सवाल यह है कि ...