diff --git a/static_core/plugins/ets/runtime/ani/docs/napi2ani_napi_key.md b/static_core/plugins/ets/runtime/ani/docs/napi2ani_napi_key.md new file mode 100644 index 0000000000000000000000000000000000000000..8190061ff25a371d4970bc712267be457aec50be --- /dev/null +++ b/static_core/plugins/ets/runtime/ani/docs/napi2ani_napi_key.md @@ -0,0 +1,1802 @@ +# Napi Functions + +### napi_module_register迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_last_error_info迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_throw迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_throw_error迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_throw_type_error迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_throw_range_error迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_is_error迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_error迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_type_error迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_range_error迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_and_clear_last_exception迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_is_exception_pending迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_fatal_error迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_open_handle_scope迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_close_handle_scope迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_open_escapable_handle_scope迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_close_escapable_handle_scope迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_escape_handle迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_reference迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_delete_reference迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_reference_ref迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_reference_unref迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_reference_value迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_array迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_array_with_length迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_arraybuffer迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_external迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_external_arraybuffer迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_object迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_object_with_properties迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_object_with_named_properties迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_symbol迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_typedarray迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_dataview迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_int32迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_uint32迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_int64迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_double迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_string_latin1迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_string_utf8迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_string_utf16迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_array_length迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_arraybuffer_info迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_prototype迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_typedarray_info迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_dataview_info迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_value_bool迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_value_double迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_value_external迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_value_int32迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_value_int64迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_value_string_latin1迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_value_string_utf8迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_value_string_utf16迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_value_uint32迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_boolean迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_global迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_null迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_undefined迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_coerce_to_bool迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_coerce_to_number迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_coerce_to_object迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_coerce_to_string迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_typeof迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_instanceof迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_is_array迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_is_arraybuffer迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_is_typedarray迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_is_dataview迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_is_date迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_strict_equals迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_property_names迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_all_property_names迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_set_property迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_property迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_has_property迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_check_object_type_tag迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_type_tag_object迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_delete_property迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_has_own_property迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_set_named_property迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_named_property迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_has_named_property迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_set_element迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_element迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_has_element迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_delete_element迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_define_properties迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_call_function迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_function迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_cb_info迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_new_target迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_new_instance迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_define_class迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_wrap迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_unwrap迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_remove_wrap迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +### 1. 解除对象与原生数据的绑定 +- 通过 `napi_wrap` 绑定的 C/C++ 数据与 JavaScript 对象的关联会被解除。 +- JavaScript 对象不再持有原生数据的引用。 +```c +MyClass* data = new MyClass(); +napi_wrap(env, js_obj, data, my_finalizer, nullptr, nullptr); + +// 提前解除绑定并释放 +void* raw_data; +napi_remove_wrap(env, js_obj, &raw_data); +delete static_cast(raw_data); // 手动释放 +``` + +### 2. 手动接管资源管理 +- **返回原生数据指针**,开发者需手动释放内存(如 `delete` 或 `free`)。 +- 避免依赖 JavaScript 的垃圾回收(GC)机制,适用于需要精确控制内存的场景。 +``` +napi_remove_wrap(env, js_obj, &raw_data); +// 手动释放,无需等待 GC +``` + +### 3. 动态替换原生数据 +- 允许将同一 JavaScript 对象重新绑定到新的 C/C++ 实例(需先移除旧实例)。 +```c +// 移除旧数据 +void* old_data; +napi_remove_wrap(env, js_obj, &old_data); +delete static_cast(old_data); + +// 绑定新数据 +MyClass* new_data = new MyClass(); +napi_wrap(env, js_obj, new_data, nullptr, nullptr, nullptr); +``` + +#### **ANI 示例** +在 ANI 中,如果你想要将 C/C++ 数据与 ArkTS 对象关联起来,通常的做法是使用 ArkTS 的 SetField 方法为对象设置一个字段,该字段可以指向一个本地分配的数据结构,或者你可以使用 ANI 的全局引用功能来保持对 ArkTS 对象的引用。 + +全局引用与弱全局引用 +全局引用:通过 AddGlobalRef 创建,允许你在本地代码中长时间持有对 ArkTS 对象的引用。这对于确保对象不会被垃圾回收器回收非常有用。 +弱全局引用:通过 WeakReference_Create 创建,类似于全局引用,但是它不会阻止对象被垃圾回收。如果对象仅由弱全局引用持有,则它可以被垃圾回收器回收。 +移除或释放关联 +当你需要解除这种关联时,可以使用以下方法: + +删除全局引用:使用 GlobalReference_Delete 来释放之前通过 AddGlobalRef 创建的全局引用。这会解除你持有的对 ArkTS 对象的强引用,允许它在不再有其他引用时被垃圾回收器回收。 +删除弱全局引用:使用 WeakReference_Delete 来释放之前通过 NewWeakGlobalRef 创建的弱全局引用。 + + +### napi_create_async_work迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_delete_async_work迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_queue_async_work迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_cancel_async_work迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_node_version迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_version迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_promise迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_resolve_deferred迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_reject_deferred迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_is_promise迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_run_script迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_uv_event_loop迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_run_script_path迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_threadsafe_function迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_threadsafe_function_context迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_call_threadsafe_function迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_acquire_threadsafe_function迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_release_threadsafe_function迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_unref_threadsafe_function迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_ref_threadsafe_function迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_date迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_date_value迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_bigint_int64迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_bigint_uint64迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_bigint_words迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_value_bigint_int64迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_value_bigint_uint64迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_value_bigint_words迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_object_freeze迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** +``` +napi_status napi_object_freeze(napi_env env, + napi_value object); +``` + +napi_object_freeze 是 Node.js 的 N-API 中的一个函数,用于冻结一个 JavaScript 对象。冻结对象意味着该对象的属性不能被修改、添加或删除,并且对象的原型也不能被改变。这为对象提供了一种不可变的状态。 + +具体来说,使用 napi_object_freeze 后: + +你不能向对象中添加新的属性。 +你不能删除对象现有的属性。 +你不能更改(例如:重写、重新配置)对象现有属性的描述符(比如 writable, configurable, enumerable 等特性)。 +如果对象的属性值本身是对象,这些嵌套的对象并没有被冻结,只有顶层对象被冻结了。 +这个函数的行为与 JavaScript 中的 Object.freeze() 方法类似,但是它是直接在 N-API 层面上操作的,因此可以在 C 或者 C++ 扩展代码中使用来冻结通过 N-API 传入的对象。 + +调用此方法通常是为了保护对象不被意外地修改,提高数据的安全性和完整性。在某些场景下,这可以防止对象被篡改,确保它们保持原始状态。 + +#### **ANI 示例** +ArkTS 作为一种静态类型语言,在编译期就已经确定了类的结构,不允许随意更改对象的属性或方法。所以不存在这种接口。 + +### napi_object_seal迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** +napi_object_seal 是 Node.js 的 N-API 中的一个函数,用于密封(seal)一个 JavaScript 对象。密封对象意味着你不能向该对象添加新的属性,也不能删除现有的属性。但是,与冻结(freeze)对象不同的是,密封对象的现有属性仍然可以被修改(例如,改变它们的值)。简而言之,napi_object_seal 限制了对象的扩展性和可删除性,但不禁止属性值的更改。 + +具体来说,使用 napi_object_seal 后: + +你不能向对象中添加新的属性。 +你不能删除对象现有的属性。 +对象现有属性的值仍然可以被修改,除非这些属性本身是不可写的(non-writable)。 +对象的原型也不能被改变。 +这使得密封的对象比普通对象更受保护,但不像冻结的对象那样严格。密封主要是防止意外地添加或删除属性,但仍允许对现有数据进行更新。这对于希望保持对象结构不变,同时允许一定程度上的灵活性的情况非常有用。 + +在 N-API 中使用 napi_object_seal 可以帮助你在原生插件开发过程中更好地控制JavaScript对象的行为,确保对象的数据完整性而不完全锁定其内容。这一功能类似于 JavaScript 中的 Object.seal() 方法,但它是通过 N-API 在 C 或 C++ 代码中实现的。 + +#### **ANI 示例** +ArkTS 作为一种静态类型语言,在编译期就已经确定了类的结构,不允许随意更改对象的属性或方法。所以不存在这种接口。 + + + +### napi_detach_arraybuffer迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_is_detached_arraybuffer迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_is_buffer迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_buffer迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_buffer_copy迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_external_buffer迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_buffer_info迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_queue_async_work_with_qos迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_load_module迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_set_instance_data迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_get_instance_data迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_add_env_cleanup_hook迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_remove_env_cleanup_hook迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_add_async_cleanup_hook迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_remove_async_cleanup_hook迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_async_init迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_async_destroy迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_open_callback_scope迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_close_callback_scope迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### node_api_get_module_file_name迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_coerce_to_native_binding_object迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_add_finalizer迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_make_callback迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_define_sendable_class迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_is_sendable迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_sendable_object_with_properties迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_wrap_sendable迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_wrap_sendable_with_size迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_unwrap_sendable迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_remove_wrap_sendable迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_sendable_array迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_sendable_array_with_length迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_sendable_arraybuffer迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_sendable_typedarray迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_run_event_loop迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_stop_event_loop迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_load_module_with_info迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_create_ark_runtime迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_destroy_ark_runtime迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_serialize迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_deserialize迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_delete_serialization_data迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_call_threadsafe_function_with_priority迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_fatal_exception迁移示例 +--- +#### 代码示例对比 + +#### **N-API 示例** + +#### **ANI 示例** + + + +### napi_wrap_enhance +--- +#### 代码示例对比 + +#### **N-API 示例** +napi_wrap 是 N-API 中的一个重要函数,用于将一个 C/C++ 对象指针与 JavaScript 对象关联起来。这允许你在 JavaScript 和原生代码之间共享对象的状态,使得在回调或者其他异步操作中能够访问到原始的 C/C++ 实例。通过这种方式,你可以实现从 JavaScript 调用 C/C++ 代码,并保持状态信息。 + +napi_wrap_enhance应该是对该接口的定制化修改。 +#### **ANI 示例** + +在 ANI 中,如果你想要将 C/C++ 数据与 ArkTS 对象关联起来,通常的做法是使用 ArkTS 的 SetField 方法为对象设置一个字段,该字段可以指向一个本地分配的数据结构,或者你可以使用 ANI 的全局引用功能来保持对 ArkTS 对象的引用。 + +全局引用与弱全局引用 +全局引用:通过 AddGlobalRef 创建,允许你在本地代码中长时间持有对 ArkTS 对象的引用。这对于确保对象不会被垃圾回收器回收非常有用。 +弱全局引用:通过 WeakReference_Create 创建,类似于全局引用,但是它不会阻止对象被垃圾回收。如果对象仅由弱全局引用持有,则它可以被垃圾回收器回收。 +移除或释放关联 +当你需要解除这种关联时,可以使用以下方法: + +删除全局引用:使用 GlobalReference_Delete 来释放之前通过 AddGlobalRef 创建的全局引用。这会解除你持有的对 ArkTS 对象的强引用,允许它在不再有其他引用时被垃圾回收器回收。 +删除弱全局引用:使用 WeakReference_Delete 来释放之前通过 NewWeakGlobalRef 创建的弱全局引用。 \ No newline at end of file