Как экспортировать объект из c в api аддона узла - PullRequest
0 голосов
/ 06 мая 2020

У меня есть код C ++, обернутый с помощью node-addon-api:

Napi::String Method(const Napi::CallbackInfo &info)
{
  Napi::Env env = info.Env();
  time_t rawtime;
  struct tm *timeinfo;
  char system_date_buffer[80];
  char iso_date_buffer[80];

  time(&rawtime);
  timeinfo = localtime(&rawtime);

  setlocale(LC_ALL, "");
  strftime(system_date_buffer, 80, "%x", timeinfo);
  string sysDateFormat(system_date_buffer);
  strftime(iso_date_buffer, 80, "%%Y-%m-%d", timeinfo);
  string isoDateFormat(iso_date_buffer);
  return Napi::String::New(env, sysDateFormat);
}

Init:

Napi::Object Init(Napi::Env env, Napi::Object exports)
{
  exports.Set(Napi::String::New(env, "sysDateFormat"), Napi::Function::New(env, Method));
  exports.Set(Napi::String::New(env, "isoDateFormat"), Napi::Function::New(env, Method));
  return exports;
}

Как мне вернуть разные значения или экспортировать объект? Выше я возвращаю только

return Napi::String::New(env, sysDateFormat);

Как мне вернуть isoDateFormat? Моя идея состоит в том, чтобы поместить sysDateFormat и isoDateFormat в объект и вернуть его, но не уверен в синтаксисе

В настоящее время я возвращаю только строку

Обновление:

Я использовал массив для хранения обоих значений, но тип возвращаемого значения показывает ошибку времени компиляции: no instance of overloaded function "Napi::Array::New" matches the argument list -- argument types are: (Napi::Env, std::string [2])

Napi::Array Method(const Napi::CallbackInfo &info)
{
  Napi::Env env = info.Env();
  time_t rawtime;
  struct tm *timeinfo;
  char system_date_buffer[80];
  char iso_date_buffer[80];
  string dateArray [2];

  time(&rawtime);
  timeinfo = localtime(&rawtime);

  setlocale(LC_ALL, "");
  strftime(system_date_buffer, 80, "%x", timeinfo);
  string sysDateFormat(system_date_buffer);
  strftime(iso_date_buffer, 80, "%%Y-%m-%d", timeinfo);
  string isoDateFormat(iso_date_buffer);
  dateArray[0] = sysDateFormat;
  dateArray[1] = iso_date_buffer;
  return Napi::Array::New(env, dateArray); // error here
}

1 Ответ

1 голос
/ 06 мая 2020

Использование типа объекта из api Napi сработало!

 Napi::Object obj = Napi::Object::New(env);
  obj.Set(Napi::String::New(env, "sysDateFormat"), sysDateFormat);
  obj.Set(Napi::String::New(env, "isoDateFormat"), isoDateFormat);
...