ArkTS侧传递回调方法到NAPI侧,NAPI创建napi\_value指针类型的对象作为参数传递到回调方法,ArkTS调用回调方法获取NAPI侧传入的参数并做修改,NAPI侧获取修改后的参数并输出。ets:Button("CallbackToArkTs") .onClick(() => { let da: Record<string, number> = testNapi.CallbackToArkTs((value: object) => { let data: Record<string, number> = value as Record<string, number>; console.info("修改前type: " + data["type"].toString()) console.info(JSON.stringify(value)) data["type"] += 10 return value; }); console.info(JSON.stringify(da)) })C++:static bool Napi_AddPropertyInt32(napi_env env, napi_value obj, const char *key, int32_t value) { napi_value key_napi = nullptr; napi_status status = napi_create_string_utf8(env, key, NAPI_AUTO_LENGTH, &key_napi); napi_value value_napi = nullptr; status = napi_create_int32(env, value, &value_napi); status = napi_set_property(env, obj, key_napi, value_napi); return true; } static napi_value CallbackToArkTs(napi_env env, napi_callback_info info) { // 获取ArkTS参数 size_t argc = 1; napi_value js_cb = nullptr; napi_get_cb_info(env, info, &argc, &js_cb, nullptr, nullptr); // native回调到ts层的object napi_value argv = nullptr; napi_create_object(env, &argv); Napi_AddPropertyInt32(env, argv, "type", 1); Napi_AddPropertyInt32(env, argv, "index", 2); // native回调到ts层 napi_value result = nullptr; napi_call_function(env, NULL, js_cb, 1, &argv, &result); napi_value typeNumber = nullptr; napi_get_named_property(env, result, "type", &typeNumber); int32_t number; napi_get_value_int32(env, typeNumber, &number); OH_LOG_INFO(LOG_APP, "修改后type: %{public}d", number); // 返回修改后的object return result; }
ArkTS侧传递回调方法到NAPI侧,NAPI创建napi\_value指针类型的对象作为参数传递到回调方法,ArkTS调用回调方法获取NAPI侧传入的参数并做修改,NAPI侧获取修改后的参数并输出。
ets:
C++: