相关问题
NAPI 通过 napi_wrap 创建的对象似乎没有被销毁
2309浏览 • 1回复 待解决
ArkTS对象绑定的C++对象如何回收?
1268浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙中使用napi_unwrap获取并操作绑定的C++对象?
410浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在多个C++线程间共享ArkTS中Sendable对象?
434浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在C/C++与ArkTS之间进行错误对象的跨语言传递?
415浏览 • 1回复 待解决
如何在C/C++ 创建ArkTS的对象
2792浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何为鸿蒙中的ArkTS对象绑定原生信息?
446浏览 • 1回复 待解决
如何实现ArkTS与C/C++的对象传递
1118浏览 • 1回复 待解决
ArkTS层通过接口访问C++层对象
772浏览 • 1回复 待解决
#鸿蒙通关秘籍# 在HarmonyOS NEXT中,如何通过NAPI接口实现ArkTS与Native C++层的业务协作?
378浏览 • 0回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙系统中通过C/C++实现数据持久化?
485浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙系统中通过Native C/C++创建子进程?
497浏览 • 1回复 待解决
如何通过 napi 获取一个 C++ map 类型的对象
2120浏览 • 1回复 待解决
将C++层分配的对象在ArkTS层管理,ArkTS层通过接口访问C++层对象业务
1257浏览 • 1回复 待解决
#鸿蒙通关秘籍#鸿蒙系统中如何在C++线程上调用ArkTS能力?
723浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙系统中通过转移方式传递ArrayBuffer对象?
519浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙应用内使用C/C++层进行组件的建立绑定?
522浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在ArkTS中实现ArrayBuffer对象的拷贝传输?
596浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙开发中获取Context对象?
509浏览 • 2回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙应用中获取应用对象?
624浏览 • 1回复 待解决
ArkTS 中的 HashMap 对象传给 C++ 层,如何转换?
630浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在ArkTS中有效管理内存中的垃圾对象?
521浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在HarmonyOS中创建PurgeableMemory对象?
529浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在HarmonyOS中读写PurgeableMemory对象?
575浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在ArkTS中实现子组件通过@Link实现与父组件的双向数据绑定?
512浏览 • 1回复 待解决
在鸿蒙开发中,通过
napi_wrap
可以实现ArkTS对象与Native C++对象的绑定。具体步骤如下:定义ArkTS的类及其接口,在
index.d.ts
文件中定义类,并声明相关方法和属性。typescript // index.d.ts export class MyObject { constructor(arg: number); plusOne: () => number;
public get value(); public set value(newVal: number); }
在CMakeLists.txt中进行编译配置。
cmake cmake_minimum_required(VERSION 3.4.1) project(object_wrap)
set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${NATIVERENDER_ROOT_PATH} ${NATIVERENDER_ROOT_PATH}/include)
add_definitions("-DLOG_DOMAIN=0x0000") add_definitions("-DLOG_TAG="testTag"")
add_library(object_wrap SHARED object_wrap.cpp) target_link_libraries(object_wrap PUBLIC libace_napi.z.so libhilog_ndk.z.so)
在
object_wrap.cpp
中定义C++类,并在构造函数中使用napi_wrap
方法进行绑定。cpp class MyObject { public: static napi_value Init(napi_env env, napi_value exports); static void Destructor(napi_env env, void* nativeObject, void* finalize_hint);
private: explicit MyObject(double value_ = 0); ~MyObject();
static napi_value New(napi_env env, napi_callback_info info);
double value_; napi_env env_; napi_ref wrapper_; };
MyObject::MyObject(double value) : value_(value), env_(nullptr), wrapper_(nullptr) {}
MyObject::~MyObject() { napi_delete_reference(env_, wrapper_); }
napi_value MyObject::Init(napi_env env, napi_value exports) { // 属性描述和类定义 }
napi_value MyObject::New(napi_env env, napi_callback_info info) { napi_value newTarget; napi_get_new_target(env, info, &newTarget); if (newTarget != nullptr) { size_t argc = 1; napi_value args[1]; napi_value jsThis; napi_get_cb_info(env, info, &argc, args, &jsThis, nullptr);
} // 简单调用方式 }
在ArkTS中使用该绑定对象进行操作。
typescript import hilog from '@ohos.hilog'; import { MyObject } from 'libobject_wrap.so'
let object: MyObject = new MyObject(0); object.value = 1023; hilog.info(0x0000, 'testTag', 'MyObject value after set: %{public}d', object.value); hilog.info(0x0000, 'testTag', 'MyObject plusOne: %{public}d', object.plusOne());