2 réponses

Meilleure réponse

J'ai trouvé la réponse : https://nodejs.org/api/n-api.html#n_api_napi_create_external_arraybuffer

Je cherchais des mots-clés différents de "external", mais c'est exactement ce que je cherchais : vous définissez au préalable un tampon en C, puis créez un tampon de tableau NAPI/JS qui utilise ce tampon sous-jacent. napi_create_arraybuffer effacerait le tampon, qui pourrait ensuite être manipulé également en C, mais vous ne pourriez pas, par exemple. chargez un fichier, puis utilisez ce tampon. Donc napi_create_external_arraybuffer est la voie à suivre.

Edit : quand j'ai posé la question j'écrivais ma thèse de licence open-source, donc voici comment je l'ai utilisé à la fin : https://github.com/ixy-languages/ixy.js/blob/ce1d7130729860245527795e483b12249

1
Sebastian Di Luzio 21 oct. 2020 à 18:58

Je ne sais pas si cela aide (je suis également relativement nouveau sur N-API.) mais vous pouvez créer un buffer de tableau à partir d'un void* et d'une longueur fixe : https://nodejs.org/api/n-api.html#n_api_napi_create_arraybuffer

Par exemple:

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
KevSlashNull 11 avril 2019 à 13:53