【问题标题】:How to export object from c to node addon api如何将对象从 c 导出到节点插件 api
【发布时间】:2020-05-06 11:55:25
【问题描述】:

我有使用 node-addon-api 包装的 c++ 代码:

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);
}

初始化:

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?我的想法是将sysDateFormatisoDateFormat 放入对象并返回它但不确定语法

目前我只返回字符串

更新:

我使用数组来存储两个值,但返回类型显示编译时错误: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
}

【问题讨论】:

  • 它现在通过使用来自 api 的对象工作。

标签: c++ node.js node-addon-api


【解决方案1】:

使用 Napi api 中的 Object 类型有效!

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

【讨论】:

  • 可以通过直接传递字符串来简化一点,例如。 obj.Set("sysDateFormat", sysDateFormat);
猜你喜欢
  • 2016-11-12
  • 2019-08-18
  • 2019-11-11
  • 1970-01-01
  • 2020-03-02
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多