Web程序集 - 整数值错误

时间:2018-03-28 11:34:13

标签: javascript c webassembly

在我的Web程序集应用程序中,我似乎无法正确地在javascript和c之间传递整数。

// C
int *g_id; // Pointer to array of integers (IDs) {0,1,2,3,4,5,6...}

int test(int id) {
  for (int i = 0; i < g_bufSize; i++) {
    if (g_id[i] == id) {
      return g_id[i];
    }
  }
  return -1;
}

Javascript电话:

// JS
ccall("test", "number", ["number"], [2]);

我希望这会返回g_id[2] 2的值,但它总是返回-1

如果我总是return g_id[2],那么它会返回一个大整数,例如184638192,除非i返回00return &g_id[2]

如果我返回一个指向其中一个数组元素// JS var pointer_return = ccall("test", "number", ["number"], [2]); var value = Module["HEAPF32"][pointer_return/Float32Array.BYTES_PER_ELEMENT]; 的指针,那么它会正确返回一个指向数组元素的指针,我可以用这个javascript取消引用:

CREATE ANALYZER myanalyzer (
   TOKENIZER whitespace,
   TOKEN_FILTERS (
     lowercase,
     kstem
   ),
   CHAR_FILTERS (
     html_strip
   )
 );

这是一个好的解决方法。但是,C代码中的相等检查仍然不起作用。

我觉得我误解了在C代码和JS之间传递变量的基本原理。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

事实证明,如果要将变量分配给C中的整数数组,则必须使用HEAP32或其他整数堆传递它们。所以在这种情况下,最后一行变为:

var value = Module["HEAP32"][pointer_return/Int32Array.BYTES_PER_ELEMENT];