我目前正在尝试使用JS进行一些低级编码。出于这个原因,我使用https://nodejs.org/api/n-api.html向我的node.js运行时添加自定义C代码。
我需要传递值并在C中更改它们才能工作,甚至可以读取数组缓冲区并以我想要的方式在C中解释它们,但我只能返回有限的JS值(数字和字符串,见此部分https://nodejs.org/api/n-api.html#n_api_functions_to_convert_from_c_types_to_n_api)。
有人知道如何获得N-API arraybuffer吗?我想给我的JS一个我用C定义的缓冲区,然后通过Dataviews工作。
发布于 2019-04-20 18:01:09
我找到了答案:https://nodejs.org/api/n-api.html#n_api_napi_create_external_arraybuffer
我寻找的关键字不同于"external",但这正是我所寻找的:您事先在C中定义了一个缓冲区,然后创建一个使用该底层缓冲区的NAPI/JS数组缓冲区。napi_create_arraybuffer会清除缓冲区,然后也可以在C中操作缓冲区,但你不能加载文件然后使用该缓冲区。因此,napi_create_external_arraybuffer是一条可行的道路。
编辑:当我问这个问题的时候,我正在写我的开源学士论文,所以我最后是如何使用它的:https://github.com/ixy-languages/ixy.js/blob/ce1d7130729860245527795e483b249a3d92a0b2/src/module.c#L112
发布于 2019-04-11 21:53:08
我不知道这是否有帮助(我也是N-API的新手)。但是您可以从一个void*和固定长度创建一个arraybuffer:https://nodejs.org/api/n-api.html#n_api_napi_create_arraybuffer
例如:
napi_value CreateArrayBuffer(napi_env env, napi_callback_info info) {
// the value to return
napi_value arrayBuffer;
// allocates 100 bytes for the ArrayBuffer
void* yourPointer = malloc(100 /* bytes */);
// creates your ArrayBuffer
napi_create_arraybuffer(env, 100 /* bytes */, &yourPointer, &arrayBuffer);
return arrayBuffer; // ArrayBuffer with 100 bytes length
}https://stackoverflow.com/questions/55166885
复制相似问题