在我的网络汇编应用程序中,我似乎无法让整数在 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
。
如果我总是返回g_id[2]
,那么它会返回一个大整数,例如184638192
,除非i
为0
code> 当它返回 0
时。
如果我返回一个指向数组元素之一的指针return &g_id[2]
,那么它会正确返回一个指向数组元素的指针,我可以使用以下 JavaScript 取消引用:
// JS
var pointer_return = ccall("test", "number", ["number"], [2]);
var value = Module["HEAPF32"][pointer_return/Float32Array.BYTES_PER_ELEMENT];
这是一个不错的解决方法。然而,C 代码中的相等性检查仍然不起作用。
我觉得我误解了在 C 代码和 JS 之间传递变量的一些基本知识。
感谢您的帮助。
最佳答案
事实证明,如果您将变量分配给 C 中的整数数组,则必须使用 HEAP32 或其他整数堆来传递它们。所以在这种情况下,最后一行变成:
var value = Module["HEAP32"][pointer_return/Int32Array.BYTES_PER_ELEMENT];
关于javascript - Web 程序集 - 整数值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49533435/