HarmonyOS NAPI中如何将C++中的结构体回调给ArkTS

HarmonyOS NAPI中如何将C++中的结构体回调给ArkTS。

HarmonyOS
7天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

可以使用函数napi_create_object将C++中的结构体封装成Object传递给ArkTS侧调用,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/napi-data-types-interfaces-V5#object相关

可以参考以下demo实现将结构体中的数据回调给ArkTS中:

//创建类Struct用于接收C++侧结构体中的数据 
export class Struct{ 
  age: number = 0; 
  name: string = 'example'; 
}; 
export class tsClass{ 
  public onCallBack1(age: number){ 
    //对age进行操作 
    console.log("testcallback1" + age) 
  } 
  public onCallBack2(name: string){ 
    //对name进行操作 
    console.log("testcallback2" + name) 
  } 
  public onCallBack3(cbStruct: Struct){ 
    //对cbStruct进行操作 
    console.log("testcallback3 " + cbStruct.age + " " + cbStruct.name) 
  } 
}

.d.ts文件:

export const transObject: (a: Object) => void; 

cpp文件:

//定义一个结构体 
struct Person{ 
  int age; 
  std::string name; 
}; 
static napi_value TransObject(napi_env env, napi_callback_info info){ 
  napi_status status; 
  size_t argc = 1; 
  napi_value js_cb; 
  status = napi_get_cb_info(env, info, &argc, &js_cb, nullptr, nullptr); 
  // 获取TS 对象的函数 oncallback3 
  napi_value oncallback3, arg_object; 
  status = napi_get_named_property(env, js_cb, "onCallBack3", &oncallback3); 
  // native 层创建对象arg_object 
  status = napi_create_object(env, &arg_object); 
  napi_value age, name, cbargc; 
  Person person; 
  person.name = "Alice"; 
  person.age = 30; 
  //给arg_object对象的属性age赋值 
  status = napi_create_int32(env, person.age, &age); 
  status = napi_set_named_property(env, arg_object, "age", age); 
  //给arg_object对象的属性name赋值 
  const char* p1name = person.name.c_str(); 
  status = napi_create_string_utf8(env, p1name, sizeof(person.name), &name); 
  status = napi_set_named_property(env, arg_object, "name", name); 
  // 调用TS 对象的方法 onCallBack3,并将上面创建的对象arg_object,作为函数参数传递 
  status = napi_call_function(env, js_cb, oncallback3, 1, &arg_object, nullptr); 
 
  return nullptr; 
} 
EXTERN_C_START 
static napi_value Init(napi_env env, napi_value exports) 
{ 
  napi_property_descriptor desc[] = { 
  { "transObject", nullptr, TransObject, nullptr, nullptr, nullptr, napi_default, nullptr} 
}; 
napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); 
return exports; 
} 
EXTERN_C_END
分享
微博
QQ
微信
回复
7天前
相关问题
napi_module结构字段描述解析
1681浏览 • 1回复 待解决
如何将js传map转成c++对象
429浏览 • 1回复 待解决
ArkTS调用C++成员函数
882浏览 • 1回复 待解决
HarmonyOS ArkTSC/C++交互
124浏览 • 1回复 待解决
如何C/C++ 创建ArkTS对象
1855浏览 • 1回复 待解决
如何C++ 提供调函数?
2065浏览 • 1回复 待解决
如何实现ArkTSC/C++数组转换
279浏览 • 1回复 待解决
如何将cookie同步到web
169浏览 • 1回复 待解决
ets如何将图片转为byte[]?
2931浏览 • 1回复 待解决
如何实现ArkTSC/C++HashMap转换?
712浏览 • 0回复 待解决
C++ 如何获取操作 Arkts 实例
571浏览 • 1回复 待解决
如何实现ArkTSC/C++对象传递
216浏览 • 1回复 待解决