簡體   English   中英

使用 node-api 將數組緩沖區從 C 轉發到 JS

[英]Forward arraybuffer from C to JS with node-api

我目前正在嘗試使用 JS 進行一些低級編碼。 出於這個原因,我使用https://nodejs.org/api/n-api.html將自定義 C 代碼添加到我的 node.js 運行時。

我傳遞值並在 c 中更改它們以使其工作,甚至讀取數組緩沖區並以我想要的方式在 C 中解釋它們,但我只能返回有限的 JS 值(數字和字符串,如本部分所示https://nodejs .org/api/n-api.html#n_api_functions_to_convert_from_c_types_to_n_api )

有人知道如何獲得 N-API 數組緩沖區嗎? 我想給我的 JS 一個我在 C 中定義的特定緩沖區,然后通過 Dataviews 工作。

我找到了答案: https : //nodejs.org/api/n-api.html#n_api_napi_create_external_arraybuffer

我正在尋找與“外部”不同的關鍵字,但這正是我所尋找的:您事先在 C 中定義一個緩沖區,然后創建一個使用該底層緩沖區的 NAPI/JS 數組緩沖區。 napi_create_arraybuffer 將清除緩沖區,然后也可以在 C 中對其進行操作,但是您不能例如加載文件然后使用該緩沖區。 所以 napi_create_external_arraybuffer 是要走的路。

編輯:當我問這個問題時,我正在寫我的開源學士論文,所以這是我最后使用它的方式: https : //github.com/ixy-languages/ixy.js/blob/ce1d7130729860245527795e483b249a3d92a0b2/src/module .c#L112

我不知道這是否有幫助(我對 N-API 也比較陌生。)但是您可以從void*和固定長度創建一個數組緩沖區: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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM