首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    NAPI 类对象导出及其生命周期管理(下)

    : 处理C ++ 类实例构造的回调函数 (因为Constructor函数被napi_define_class调用了)。...in data: 作为回调信息的数据属性传递给构造函数回调的可选数据in property_count: 属性数组中参数的个数in properties: 属性数组,具体看代码中napi_property_descriptor...JS构造函数如果一个js函数被使用new操作符来调用了,那么这个函数就称之为js构造函数C++类回调函数我们调用别人的API叫call,调用的第三方API调用我们的函数叫回调(callback)4.1.2.3...: C++类实例对象in finalize_cb: 释放实例对象的回调函数in finalize_hint: 传递给回调函数的数据out result: 绑定js对象的引用返回:调用成功返回0,失败返回其他...这个方法在constructor回调函数中使用,从给定的回调信息中检索有关调用的详细信息,如参数和This指针。

    41520

    三方库移植之NAPI开发异步调用:Callback&Promise

    因为execute函数不在JS线程中,所以不允许execute函数调用napi的接口。业务逻辑的返回值可以返回到complete回调中处理。...,避免了层层嵌套的回调函数,保证了回调是以异步的方式进行调用的;用户在调用这些接口的时候,接口实现将异步执行任务,同时返回一个 Promise 对象,其代表异步操作的结果;在返回的结果的个数超过一个时,...本示例定义的上下文数据包含:异步工作项对象、回调函数、2个参数(加数、被加数)、业务逻辑处理结果等4个属性。...回调函数把上下文中的结果转为JS类型、调用JS回调函数在异步工作项工作时序图中位置,在图中用红框标记如下创建异步工作项前,声明addAsyncCompleteCB这个函数,用作于napi_create_async_work...JS函数,用于执行回调函数等场景。

    78320

    HarmonyOS 开发实践 —— C++子线程与UI主线程通信方案

    基于threadsafe的实现方案概述针对在HarmonyOS中,Native子线程不能直接访问ArkTS主线程的资源的场景,Node-API提供了napi_threadsafe_function这一套线程安全函数接口...Native侧通过napi_create_threadsafe_function创建线程安全函数,将callback注册到线程安全函数中,等待后续其他线程抛异步任务进行回调。...通过napi_create_async_work,将ExecuteWork与WorkComplete添加为异步任务的执行回调与完成回调。...通过注册给线程安全函数的callback回到主线程,然后通过napi_call_function调用ArkTS函数回到ArkTS侧。在ArkTS线程中解析或拒绝promise的唯一方法。...代码实现C++:Native侧通过napi_create_threadsafe_function创建线程安全函数,将callback注册到线程安全函数中,等待后续其他线程抛异步任务进行回调。

    50020

    初识鸿蒙 NAPI:从概念到踩坑的跨语言开发入门

    它的核心角色是 “翻译官”: 让 ArkTS 代码能像调用自身函数一样调用 C/C++ 原生方法; 让原生代码能反向触发 ArkTS 的回调逻辑; 屏蔽不同语言的底层差异(如数据类型、内存管理),...函数调用:双向通信的实现逻辑 NAPI 支持两种核心调用模式,覆盖不同业务场景: ArkTS 调用原生函数:需先通过NAPI_MODULE宏注册原生模块,将原生函数与 ArkTS 可访问的方法名绑定;ArkTS...原生调用 ArkTS 回调:ArkTS 将回调函数作为参数传入原生模块,原生代码在异步任务完成后(如 IO 操作),通过napi_call_function触发回调,将结果返回给 ArkTS。...(SHARED表示动态库,鸿蒙 NAPI 必须用动态库); napi_init.cpp是原生代码文件(包含 NAPI 函数、模块注册逻辑),可添加多个源文件(如napi_init.cpp utils.cpp...,支持多端适配) .fontWeight(FontWeight.Bold) // 字体加粗 .onClick(() => { // 点击事件回调:用户点击Text时执行

    26700

    纯血鸿蒙APP实战开发——在Native侧实现进度通知功能

    介绍本示例通过模拟下载场景介绍如何将Native的进度信息实时同步到ArkTS侧。...效果图预览使用说明点击“Start Download“按钮后,Native侧启动子线程模拟下载任务Native侧启动子线程模拟下载,并通过Arkts的回调函数将进度信息实时传递到Arkts侧实现思路前端进度条使用...NativeProgressNotifyConstants.PROGRESS_ANIMATION_DURATION, curve: Curve.Ease }) .style({ strokeWidth: 15 })JS侧调用Native侧方法,并传入用于接收下载进度的回调函数...,在该回调函数中更改状态变量 naitiveprogressnotify.startDownload((data: number) => { this.progress = data;...回调,向Arkts侧传递进度信息 napi_create_int32(arg->env, arg->progress, &progress); napi_call_function(arg-

    25920

    北向应用集成三方库——NAPI 导出类对象

    js结构体时实际的构建函数 static void Destructor(napi_env env, void *nativeObject, void *finalize); // 释放资源的函数...: c类的名字in length: c类名字的长度,默认自动长度使用NAPI_AUTO_LENGTHin constructor: 处理构造类实例的回调函数in data: 作为回调信息的数据属性传递给构造函数回调的可选数据...js类的构造函数当js应用通过new方法获取类对象的时候,此时会调用 napi_define_class 中设置 constructor 回调函数,该函数实现方法如下: napi_value NapiTest...参数说明:in env: 调用api的环境in js_object: 绑定c类实例的js对象in native_object: 类实例对象in finalize_cb: 释放实例对象的回调函数in...finalize_hint: 传递给回调函数的数据out result: 绑定js对象的引用 返回:调用成功返回0,失败返回其他导出js类创建生命周期(生命周期相关可以参考文档napi生命周期) 在设置类导出前

    40920

    JS异步转同步组件——DeAsync.js原理深入分析

    循环,回调函数永远不会被执行,程序也不会结束。...这里做一个简单的解释,最后一句NODE_API_MODULE,把init函数作为deasync模块导出,而前面的代码,给deasync注册了一个run方法。...上面我们看到的,那一句关键起作用的语句,就是强制js引擎执行一个tick。 如果js引擎在一个tick里发现,队列里有任务要执行,就取出一个任务,把回调函数推入主线程执行。...但我们通过调用deasync.runLoopOnce(),在主线程代码执行完成前,强行激活了事件循环,事件循环会检查观察者,如果这时异步调用返回了结果,它的回调函数也会被执行。...我们只要把回调函数执行与否作为判断条件,就可以暂时卡住主线程,等返回结果后再继续,从而把异步api转成同步。

    8.3K62

    鸿蒙(HarmonyOS)安全和高效的使用N-API开发Native模块

    接口,可以将 native 对象和 js 对象绑定,当 js 对象被 GC 回收时,需要通过回调函数对 native 对象的资源进行清理。...work加到队列,由底层去调度执行 napi_queue_async_work(env, addonData->asyncWork); return promise;}在异步操作完成后,回调函数将被调用...除此之外,仍需注意: 对线程安全函数的调用是异步进行的,对 JavaScript 回调的调用将被放置在任务队列中; 创建 napi_threadsafe_function 时,可以提供 napi_finalize...回调。...当线程安全函数即将被销毁时,将在主线程上调用此 napi_finalize 回调; 在调用 napi_create_threadsafe_function 时给定了上下文,可以从任何调用 napi_get_threadafe_function_context

    79620

    OpenHarmony集成OCR三方库实现文字提取

    源码分析本样例源码的分析主要涉及到两个方面,一方面是N-API接口的实现,另一方面是应用层的页面布局和业务逻辑。N-API实现1....(& demoModule);}通过nm_modname定义模块名,nm_register_func注册接口函数,在Init函数中指定了JS中initOCR,startOCR,destroyOCR对应的本地实现函数...,这样就可以在对应的本地实现函数中调用三方库Tesseract的具体实现了。...;}首先通过napi_get_cb_info方法获取JS侧传入的参数信息,将参数转成C++对应的类型,然后创建异步工作,异步工作的方法参数中包含,执行的函数以及函数执行完成的回调函数。...), addonData->result.length(), &result); //执行回调函数 napi_value returnVal = nullptr; napi_call_function

    71420
    领券