Iは、以下のパラメータでasm.jsにコンパイルされたC関数を有する:asm.jsの関数との間の二重配列を渡す
void myfunc(double v1[], double v2[], int v_size, double c)
を次に別の充填、変換を適用し、アレイ(v1
)に取り出力と同じサイズ(v2
)の配列。
私はそれをコンパイルし、次のJSコードを実行します。私はgetValue(v2, "double")
を実行したときに
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]);
は、しかし、私は(間違っている)1.297703e-318を取得し、私はgetValue(v2 + 8, "double")
を実行したり、getValue(v2 + 16, "double")
ときには0を返します。 (これも間違っています)。
v1
の内容をコンソールからログアウトするだけでCの機能を減らしました。ガベージデータも同様に出力されるので、少なくとも二重配列の読み込みに問題があります。具体的な質問は次のとおりです。
- ダブル配列をasm.js関数に正しく渡すにはどうすればよいですか?
- asm.js関数からdouble配列を正しく返すにはどうすればよいですか?
["配列"、 "番号"、 "番号"、 "番号"]は[配列]、[配列]、[番号]、[番号]]ではいけませんか? – pah
@threadp:私はasmで言われました。j2 IRCチャネルは、v2がJavascript配列ではないので、代わりに「番号」を使用するために「配列」を渡すべきではありません。 – Lucas
@ルーカス、その場合、なぜそれが["number"、 "number"、 "number"、 "number"]ではないのですか? –