Я наконец-то нашел, что я делаю не так Нельзя хранить g_Value
между вызовами. Вместо этого следует сохранить napi_ref
и использовать функцию napi_get_reference_value
для извлечения соответствующего значения. Таким образом, код стороны C ++ должен выглядеть следующим образом:
// Initialize method:
napi_ref ref;
napi_create_reference(env, value, 1, &ref);
g_Ref = ref; // store the reference somewhere between calls
// MyAddonMethod method:
napi_value referenceValue;
napi_get_reference_value(env, g_Ref, &referenceValue);
napi_valuetype type;
napi_status stat = napi_typeof(env, referenceValue, &type); // napi_ok, napi_function
Конечно, вы не должны забывать отпустить ссылку, используя napi_delete_reference
, когда она больше не нужна.