Nodejs пример использования addon- napi_call_function - PullRequest
0 голосов
/ 22 февраля 2020

давайте предположим следующую функцию


napi_value GeoToSeqnum(napi_env env, const napi_callback_info info) {
  napi_status status;
  size_t argc = 1;
  napi_value argv[1];



  status = napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr);
  assert(status == napi_ok);

  napi_value cb = argv[2];



    // if (!argv[0].IsNumber() || !argv[1].IsNumber() ){
    //       napi_throw_error(env,0, "Number expected");
    // } 



    uint64_t out_seqnum=10;

  napi_value seqnum[1];
  status = napi_create_int64(env,out_seqnum,  &seqnum);
  assert(status == napi_ok);

  napi_value global;
  status = napi_get_global(env, &global);
  assert(status == napi_ok);

  napi_value result;
  status = napi_call_function(env, global, cb, 1, seqnum, &result);
  assert(status == napi_ok);

  return nullptr;
}

эта функция возвращает следующий результат

var addon = require('bindings')('dggridjs');
// const myaddon = require('./addon');
console.log(addon);
addon.GeoToSeqnum(0,0,function(seqnumber){
  console.log(seqnumber[0]); // must return 10
});

> type sizes: big int: 64 bits / big double: 64 bits

У меня две проблемы, прежде всего, если я добавлю следующую часть в код это не может скомпилировать. Я хочу знать, как я могу проверить тип ввода

  if (!argv[0].IsNumber() || !argv[1].IsNumber() ){
          napi_throw_error(env,0, "Number expected");
    } 
==> compile error :error C2228: left of '.IsNumber' must have class/struct/union 

, и моя вторая проблема с выводом. Кажется, это возвращает тип вывода, который является правильным, но мне нужно, чтобы он возвращал число. Я запутался в использовании напи функций здесь. Буду признателен за вашу помощь. Спасибо

...