У меня есть функция C скомпилирована в asm.js со следующими параметрами:Передача двойных массивов между функциями в asm.js
void myfunc(double v1[], double v2[], int v_size, double c)
Он принимает в массиве (v1
), применяет трансформацию, затем заполняет другое массив того же размера (v2
) с выходом.
Я скомпилировать его, а затем запустить следующий JS код:
v1 = new Array(1.0, 1.5, 2.0);
v2 = Module._malloc(8 * v1.length);
Module.ccall("myfunc", null, ["array", "number", "number", "number"], [v1, v2, v1.length, 2]);
Однако, когда я бегу getValue(v2, "double")
я получаю 1.297703e-318 (что неправильно), и когда я бегу getValue(v2 + 8, "double")
или getValue(v2 + 16, "double")
возвращает 0 (что также неверно).
Я уменьшил функцию C, чтобы просто вывести из системы содержимое v1
, а также распечатывает данные мусора, поэтому, по крайней мере, возникает проблема с чтением переданного двойного массива. Более конкретные вопросы:
- Как правильно передать двойной массив в функцию asm.js?
- Как правильно вернуть двойной массив из asm.js-функции?
Должно ли ["массив", "число", "число", "число"] быть ["массив", "массив", "число", "число"]? – pah
@threadp: Мне сказали об этом.js IRC, так как v2 не является массивом Javascript, я не должен использовать «массив» для его передачи, вместо этого использовать «число». – Lucas
@ Лукас, в этом случае, почему нет [«число», «число», «число», «число»]? –