функции здесь ... именно они выполняют работу по передаче / возвращению массива.

ел бы протестировать WebAssembly для выполнения некоторых сложных вычислений массива.

Итак, я написал простую функцию C ++, добавив дваint массивы, содержащие 3 элемента каждый:

// 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 и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].

Я пробовал разные вещи, в том числе вызов функции сccall() (увидетьраспечатка документов ) и кажется, что я не могу получить массив, переданный в качестве аргумента моей скомпилированной функции wasm.

Например, с помощью следующей функции C ++:

extern "C" {

int first(int * arr) {
  return arr[0];
}

}

Результат при вызове в JavaScript - это случайное целое число вместо ожидаемого значения из массива, который я передал в качестве аргумента.

Что мне не хватает?

NB Я почти ничего не знаю о C ++, поэтому прошу прощения, если это вопрос новичка, связанный с моим незнанием C ++ ...

Ответы на вопрос(2)

Ваш ответ на вопрос