在我的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
返回0
时0
为return &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之间传递变量的基本原理。
感谢您的帮助。
答案 0 :(得分:0)
事实证明,如果要将变量分配给C中的整数数组,则必须使用HEAP32或其他整数堆传递它们。所以在这种情况下,最后一行变为:
var value = Module["HEAP32"][pointer_return/Int32Array.BYTES_PER_ELEMENT];