Javascript-如何在Emscripten生成的代码中使用C分配的数组?

我有这样的C代码:

extern "C" {

void MyCoolFunction (int** values)
{
    int howManyValuesNeeded = 5;
    *values = new int[howManyValuesNeeded];
    for (int i = 0; i < howManyValuesNeeded; i++) {
        (*values)[i] = i;
    }
}

}

从C可以这样使用:

int *values = NULL;
MyCoolFunction (&values);
// do something with the values
delete[] values;

当然,实际的代码要复杂得多,但关键是该函数在内部分配了一个int数组,并决定了数组的大小.

我用Emscripten翻译了这段代码,但是我不知道如何从javascript访问在函数内部分配的数组. (我已经知道如何在Emscripten生成的代码中使用导出的函数和指针参数,但是我不知道如何解决此问题.)

有任何想法吗?

解决方法:

在Emscripten中,内存存储为一个巨大的整数数组,而指针只是该数组的索引.因此,就像在整数中一样,您可以在C和Javascript之间来回传递指针. (这听起来好像您知道如何传递值,但是如果没有,请转到here.)

好的.现在,如果您在C端创建一个指针(如上面的代码中所示)并将其传递给Javascript,则Emscripten附带了一些辅助函数,可让您访问该内存.特别是setValuegetValue.

因此,如果将您的values变量传递给JS并希望访问索引5,则可以使用以下方法进行操作:

var value5 = getValue(values+(5*4), 'i32');

您必须将索引乘以指针的字节数(5 * 4),并指出数组的类型(在这种情况下为32位整数).

上一篇:cobbler源码安装


下一篇:shell脚本一键部署cobbler服务器_20210715