【问题标题】:Node.js C++ addons: how to create JS Date object by N-API and V8 in Node.js 10Node.js C++ 插件:如何在 Node.js 10 中通过 N-API 和 V8 创建 JS Date 对象
【发布时间】:2019-03-22 20:02:46
【问题描述】:

napi_create_date 函数出现在 Node.js 从 11.11.0 版本开始。 https://nodejs.org/api/n-api.html#n_api_napi_create_date

仅使用 N-API 和 V8 API 在 Node.js 10.15.3 上创建 JS Date(从 C++ 双精度)有哪些解决方法?

或者我可以从 N-API 获得 V8 Isolate?

或者我如何结合 N-API 和 NAN 来创建 Date 并在 napi_call_function 中使用它?

我需要一些方法来为napi_call_function 调用创建一个日期值(来自 C++ 双精度)。

【问题讨论】:

    标签: node.js node.js-addon


    【解决方案1】:

    现在我写了这样一个解决方法。 用env->context()代替v8::Isolate::GetCurrent()更正确,但是napi_env是在src/js_native_api_v8.h中定义的,在~/.node-gyp/10.15.3/include/node中是不存在的,所以我没有找到快速使用env->context()的方法。

    #include <v8.h>
    
    // This asserts v8::Local<> will always be implemented with a single
    // pointer field so that we can pass it around as a void*.
    static_assert(sizeof(v8::Local<v8::Value>) == sizeof(napi_value),
      "Cannot convert between v8::Local<v8::Value> and napi_value");
    
    napi_status napi_create_date_by_v8(
        double time,
        napi_value* result
    ) {
      v8::Isolate* isolate = v8::Isolate::GetCurrent();
    
      v8::MaybeLocal<v8::Value> maybe_date = v8::Date::New(isolate, time);
      v8::Local<v8::Value> local = maybe_date.ToLocalChecked();
      *result = reinterpret_cast<napi_value>(*local);
      return napi_ok;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-11
      • 2021-02-01
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      • 2020-11-26
      相关资源
      最近更新 更多