簡體   English   中英

將 N-API object 讀入 C++ 原語

[英]Reading N-API object into C++ primitive

我從 generator-napi-module 的 ObjectWrap 樣板開始創建了一個簡單的 N-API 模塊,並成功地將數據(包含具有字符串、數字和 boolean 屬性的對象的數組)傳遞給 JS。 但是,我無法解析傳遞回本機代碼的同一對象之一的屬性; 具體來說,根據傳遞的 object 的屬性(數字)創建uint32_t值。

假設創建了一個對象數組並將其傳遞給 JS:

Napi::Value ObjectWrapAddon::GetSomeList(const Napi::CallbackInfo& info){
  Napi::Env env = info.Env();
  native_struct_one *data = NULL;
  native_struct_two opts = { TRUE,FALSE,FALSE };
  int retVal = native_lib_method(&data, &opts);
  if(retVal!=OK) {
    return Napi::Array::New(env); // return empty array
  }
  Napi::Array arr = Napi::Array::New(env);
  uint32_t i = 0;
  do {
    Napi::Object tempObj = Napi::Object::New(env);
    tempObj.Set("someProp", data->someVal);
    arr[i] = tempObj;
    i++;
    data = data->next;
  } while(data);
  return arr;
}

然后將這些對象之一傳遞給本機 function 調用:

Napi::Value ObjectWrapAddon::OtherMethod(const Napi::CallbackInfo& info){
  Napi::Env env = info.Env();
  Napi::Object obj = info[0].As<Napi::Object>();
  uint32_t temp = obj.Get("someProp").As<Napi::Number>();
  return Napi::Number::New(env, temp);
}

這構建得很好,但是上面的 OtherMethod() 在uint32_t temp = obj.Get('someProp').As<Napi::Number>()處給出了一個A number was expected錯誤。

如何從 JS object 屬性值創建本機 (C++) 值?

我錯過了兩件事,這讓它起作用:

  1. 我在使用 Get/Set 時與字符串不一致。 如果Napi::Object::Set與單引號一起使用,單引號必須與Napi::Object::Get一起使用; 雙引號也是如此。
  2. 根據文檔需要使用 Uint32Value() 方法(我必須在我的修補中刪除它),給出: uint32_t temp = obj.Get("someProp").As<Napi::Number>().Uint32Value();

修復這些問題提供了預期的行為和 output。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM