#鸿蒙通关秘籍#鸿蒙系统中如何在C++线程上调用ArkTS能力?

HarmonyOS
3天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
暖风轻拂SMTP

在鸿蒙系统的C++线程上调用ArkTS能力需要创建一个ArkTS执行环境。可以通过Node-API接口实现。首先,创建基础运行环境,然后加载自定义ArkTS模块。在加载的模块中,使用napi_get_named_property方法查找函数newSendable。接下来,通过napi_call_function调用并返回结果。为了防止内存泄漏,最后销毁ArkTS环境。

cpp #include "napi/native_api.h" #include <thread>

static void *CreateArkRuntimeFunc(void *arg) { napi_env env = nullptr; napi_status ret = napi_create_ark_runtime(&env); if (ret != napi_ok) { std::abort(); } napi_value test = nullptr; ret = napi_load_module_with_info(env, "entry/src/main/ets/pages/SendableObjTest", "com.example.myapplication/entry", &test); if (ret != napi_ok) { std::abort(); } napi_value sendableObjTest = nullptr; ret = napi_get_named_property(env, test, "SendableObjTest", &sendableObjTest); if (ret != napi_ok) { std::abort(); } napi_value newSendable = nullptr; ret = napi_get_named_property(env, sendableObjTest, "newSendable", &newSendable); if (ret != napi_ok) { std::abort(); } napi_value result = nullptr; ret = napi_call_function(env, sendableObjTest, newSendable, 0, nullptr, &result); if (ret != napi_ok) { std::abort(); } int value0; napi_get_value_int32(env, result, &value0); if (value0 != 1024) { std::abort(); } ret = napi_destroy_ark_runtime(&env); return nullptr; }

分享
微博
QQ
微信
回复
3天前
相关问题
ArkTS调用C++的成员函数
1276浏览 • 1回复 待解决
c/c++层主动调用ArkTS存在问题
345浏览 • 1回复 待解决
如何在C/C++ 创建ArkTS的对象
2205浏览 • 1回复 待解决
C++调用ArkTS 定义的方法
1985浏览 • 1回复 待解决
ArkTSC++互相直接调用
2162浏览 • 1回复 待解决
HarmonyOS 如何调用标准C++
422浏览 • 1回复 待解决