mirror of https://github.com/lukechilds/node.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.8 KiB
51 lines
1.8 KiB
#include <node_api.h>
|
|
|
|
#define NAPI_CALL(env, theCall) \
|
|
if ((theCall) != napi_ok) { \
|
|
const napi_extended_error_info* error; \
|
|
napi_get_last_error_info((env), &error); \
|
|
const char* errorMessage = error->error_message; \
|
|
errorMessage = errorMessage ? errorMessage : "empty error message"; \
|
|
napi_throw_error((env), errorMessage); \
|
|
return; \
|
|
}
|
|
|
|
void RunCallback(napi_env env, napi_callback_info info) {
|
|
napi_value args[1];
|
|
NAPI_CALL(env, napi_get_cb_args(env, info, args, 1));
|
|
|
|
napi_value cb = args[0];
|
|
|
|
napi_value argv[1];
|
|
NAPI_CALL(env, napi_create_string_utf8(env, "hello world", -1, argv));
|
|
|
|
napi_value global;
|
|
NAPI_CALL(env, napi_get_global(env, &global));
|
|
|
|
NAPI_CALL(env, napi_call_function(env, global, cb, 1, argv, NULL));
|
|
}
|
|
|
|
void RunCallbackWithRecv(napi_env env, napi_callback_info info) {
|
|
napi_value args[2];
|
|
NAPI_CALL(env, napi_get_cb_args(env, info, args, 2));
|
|
|
|
napi_value cb = args[0];
|
|
napi_value recv = args[1];
|
|
|
|
NAPI_CALL(env, napi_call_function(env, recv, cb, 0, NULL, NULL));
|
|
}
|
|
|
|
#define DECLARE_NAPI_METHOD(name, func) \
|
|
{ name, func, 0, 0, 0, napi_default, 0 }
|
|
|
|
void Init(napi_env env, napi_value exports, napi_value module, void* priv) {
|
|
napi_status status;
|
|
napi_property_descriptor desc[2] = {
|
|
DECLARE_NAPI_METHOD("RunCallback", RunCallback),
|
|
DECLARE_NAPI_METHOD("RunCallbackWithRecv", RunCallbackWithRecv),
|
|
};
|
|
status = napi_define_properties(env, exports, 2, desc);
|
|
if (status != napi_ok) return;
|
|
}
|
|
|
|
NAPI_MODULE(addon, Init)
|
|
|