首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用node-api将arraybuffer从C转发到JS

使用node-api将arraybuffer从C转发到JS
EN

Stack Overflow用户
提问于 2019-03-14 23:53:07
回答 2查看 1.4K关注 0票数 1

我目前正在尝试使用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工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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

票数 2
EN

Stack Overflow用户

发布于 2019-04-11 21:53:08

我不知道这是否有帮助(我也是N-API的新手)。但是您可以从一个void*和固定长度创建一个arraybuffer:https://nodejs.org/api/n-api.html#n_api_napi_create_arraybuffer

例如:

代码语言:javascript
复制
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
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55166885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档