Skip to content

Instantly share code, notes, and snippets.

@NickNaso
Created April 27, 2020 13:46
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save NickNaso/11872f18a3e1db1139aa9d6e5a0c8e75 to your computer and use it in GitHub Desktop.
Save NickNaso/11872f18a3e1db1139aa9d6e5a0c8e75 to your computer and use it in GitHub Desktop.
N-API register module (the new way)
{
"targets": [
{
"target_name": "hello",
"sources": [ "hello.cc" ]
}
]
}
'use strict'
const addon = require('bindings')('hello');
console.log(addon.hello()); // 'world'
#include <assert.h>
#include <node_api.h>
napi_value Method(napi_env env, napi_callback_info info) {
napi_status status;
napi_value world;
status = napi_create_string_utf8(env, "world", 5, &world);
assert(status == napi_ok);
return world;
}
#define DECLARE_NAPI_METHOD(name, func) \
{ name, 0, func, 0, 0, 0, napi_default, 0 }
extern "C" {
napi_value napi_register_module_v1(napi_env env, napi_value exports) {
napi_status status;
napi_property_descriptor desc = DECLARE_NAPI_METHOD("hello", Method);
status = napi_define_properties(env, exports, 1, &desc);
assert(status == napi_ok);
return exports;
}
}
//NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)
@NickNaso
Copy link
Author

napi_register_module_v1

@NickNaso
Copy link
Author

In WIndows you need to add __declspec(dllexport) like reported below:

#include <assert.h>
#include <node_api.h>

napi_value Method(napi_env env, napi_callback_info info) {
  napi_status status;
  napi_value world;
  status = napi_create_string_utf8(env, "world", 5, &world);
  assert(status == napi_ok);
  return world;
}

#define DECLARE_NAPI_METHOD(name, func)                                        \
  { name, 0, func, 0, 0, 0, napi_default, 0 }

extern "C" {

  napi_value __declspec(dllexport) napi_register_module_v1(napi_env env, napi_value exports) {
    napi_status status;
    napi_property_descriptor desc = DECLARE_NAPI_METHOD("hello", Method);
    status = napi_define_properties(env, exports, 1, &desc);
    assert(status == napi_ok);
    return exports;
  }

}

//NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)

@Kreijstal
Copy link

Kreijstal commented Apr 2, 2024

for msys2/mingw you have to use

g++ -shared -fPIC  hello.cc -lnode -o hello.node

and #include <node/node_api.h> instead of just node_api.h
then test:
echo "console.log(require('./hello.node').hello())" | node -

@NickNaso
Copy link
Author

NickNaso commented Apr 2, 2024

@Kreijstal thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment