#鸿蒙通关秘籍#如何在鸿蒙中使用napi_unwrap获取并操作绑定的C++对象?

HarmonyOS
2024-12-20 10:17:36
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
LDAP风谷

在鸿蒙开发的过程中,可以通过napi_unwrap来获取ArkTS对象绑定的C++对象,并对其进行相关的操作。具体实现步骤如下:

  1. 在类中定义获取和设置值的方法,并使用napi_unwrap获取已绑定的C++对象。

    cpp class MyObject { public: static napi_value GetValue(napi_env env, napi_callback_info info); static napi_value SetValue(napi_env env, napi_callback_info info); // 其他方法 };

    napi_value MyObject::GetValue(napi_env env, napi_callback_info info) { napi_value jsThis; napi_get_cb_info(env, info, nullptr, nullptr, &jsThis, nullptr);

    MyObject* obj; napi_unwrap(env, jsThis, reinterpret_cast<void**>(&obj)); napi_value num; napi_create_double(env, obj->value_, &num);

    return num; }

    napi_value MyObject::SetValue(napi_env env, napi_callback_info info) { size_t argc = 1; napi_value value; napi_value jsThis; napi_get_cb_info(env, info, &argc, &value, &jsThis, nullptr);

    MyObject* obj; napi_unwrap(env, jsThis, reinterpret_cast<void**>(&obj)); napi_get_value_double(env, value, &obj->value_);

    return nullptr; }

  2. 在ArkTS端,通过对象的方法间接调用C++方法。

    typescript import hilog from '@ohos.hilog'; import { MyObject } from 'libobject_wrap.so';

    let object: MyObject = new MyObject(0); object.value = 99; hilog.info(0x0000, 'testTag', 'Updated MyObject value: %{public}d', object.value); hilog.info(0x0000, 'testTag', 'Incremented MyObject by one: %{public}d', object.plusOne());

这样,通过napi_unwrap就可以很方便地从ArkTS对象中提取出C++对象,并对其进行操作。

分享
微博
QQ
微信
回复
2024-12-20 11:15:08
相关问题
ArkTS对象绑定C++对象如何回收?
1716浏览 • 1回复 待解决
如何在C/C++ 创建ArkTS对象
3504浏览 • 1回复 待解决
如何在C++项目中使用pthread
3191浏览 • 1回复 待解决