相关问题
如何在C++子线程调用ArkTS方法?(线程安全)
1340浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在多个C++线程间共享ArkTS中Sendable对象?
60浏览 • 1回复 待解决
HarmonyOS在C++线程上调用napi_create_ark_runtime,如何调用到js层的对象
422浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙系统中通过Native C/C++创建子进程?
35浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙系统中通过C/C++实现数据持久化?
73浏览 • 1回复 待解决
如何在C++的子线程调用从ArkTS传递过来的function
2158浏览 • 1回复 待解决
HarmonyOS 如何在ArkTS中向C++层注册回调,C++层如何调用回调方法?
157浏览 • 1回复 待解决
如何在Native侧C++子线程直接调用ArkTS接口,不用通过ArkTS侧触发回调
2107浏览 • 1回复 待解决
HarmonyOS C++自创线程如何回调到ArkTS应用中?
238浏览 • 1回复 待解决
ArkTS调用C++类中的成员函数
1276浏览 • 1回复 待解决
c/c++层主动调用ArkTS存在问题
345浏览 • 1回复 待解决
如何在C/C++ 创建ArkTS的对象
2205浏览 • 1回复 待解决
C++调用ArkTS 定义的方法
1985浏览 • 1回复 待解决
ArkTS与C++互相直接调用
2162浏览 • 1回复 待解决
HarmonyOS在native项目中,如何在c++中使用系统能力,比如使用WIFI\蓝牙能力
363浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何使用AKI实现C++跨线程调用JS函数,并进行加10操作?
49浏览 • 0回复 待解决
#鸿蒙通关秘籍# 怎样在HarmonyOS NEXT开发中处理C++与ArkTS异步接口的交互调用?
35浏览 • 0回复 待解决
HarmonyOS C++的异步通知如何回调给ArkTS的线程?
189浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在ArkTS中创建和管理Worker线程?
58浏览 • 2回复 待解决
ArkTS与Native(C/C++/Rust)通过什么方式实现调用交互
2197浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何通过Node-API进行多个C++线程的数据共享?
56浏览 • 1回复 待解决
Native侧获取env具有线程限制,如何在C++子线程触发ArkTS侧回调
1986浏览 • 1回复 待解决
如何导出C++自定义类,导出后如何在ArkTS侧进行类方法调用
2197浏览 • 1回复 待解决
HarmonyOS 如何调用标准C++库
422浏览 • 1回复 待解决
HarmonyOS有C++调用ArkTs代码的demo示例吗?
446浏览 • 1回复 待解决
在鸿蒙系统的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; }