可以使用函数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通过napi\_create\_object创建object,传这个object给ArkTS,传递的这个object里包含了每一个结构体object,通过napi\_set\_named\_property把每一个结构体的object添加进去。
可以使用函数napi\_create\_object将C++中的结构体封装成Object传递给ArkTS侧调用,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/napi-data-types-interfaces-V5\#object相关
可以参考以下demo实现将结构体中的数据回调给ArkTS中:
.d.ts文件:
cpp文件:
通过napi\_create\_object创建object,传这个object给ArkTS,传递的这个object里包含了每一个结构体object,通过napi\_set\_named\_property把每一个结构体的object添加进去。