鸿蒙HarmonyOS应用开发之使用NAPI接口在主线程中进行模块加载

news/2024/5/9 8:49:27/文章来源:https://blog.csdn.net/maniuT/article/details/137089514

场景介绍

Node-API中的napi_load_module接口的功能是在主线程中进行模块的加载,当模块加载出来之后,可以使用函数napi_get_property获取模块导出的变量,也可以使用napi_get_named_property获取模块导出的函数,目前支持以下场景:

  • 加载系统模块,例如@ohos.hilog
  • 加载ets目录下文件中的模块

加载系统模块使用示例

使用napi_load_module导出系统模块hilog,并调用info函数

static napi_value loadModule(napi_env env, napi_callback_info info) {//1. 使用napi_load_module加载模块@ohos.hilognapi_value result;napi_status status = napi_load_module(env, "@ohos.hilog", &result);//2. 使用napi_get_named_property获取info函数napi_value infoFn;napi_get_named_property(env, result, "info", &infoFn);napi_value tag;std::string formatStr = "test";napi_create_string_utf8(env, formatStr.c_str(), formatStr.size(), &tag);napi_value outputString;std::string str = "Hello OpenHarmony";napi_create_string_utf8(env, str.c_str(), str.size(), &outputString);napi_value flag;napi_create_int32(env, 0, &flag);napi_value args[3] = {flag, tag, outputString};//3. 使用napi_call_function调用info函数napi_call_function(env, result, infoFn, 3, args, nullptr);return result
}

加载ArkTS文件中的模块使用示例

当加载文件中的模块时,如以下ArkTS代码:

//./src/main/ets/Test.ets
let value = 123;
function test() {console.log("Hello OpenHarmony");
}
export {value, test};
  1. 需要在工程的build-profile.json5文件中进行以下配置
{"buildOption" : {"arkOptions" : {"runtimeOnly" : {"sources": ["./src/main/ets/Test.ets"]}}}
}
  1. 使用napi_load_module加载Test文件,调用函数test以及获取变量value
static napi_value loadModule(napi_env env, napi_callback_info info) {napi_value result;//1. 使用napi_load_module加载Test文件中的模块napi_status status = napi_load_module(env, "ets/Test", &result);napi_value testFn;//2. 使用napi_get_named_property获取test函数napi_get_named_property(env, result, "test", &testFn);//3. 使用napi_call_function调用函数testnapi_call_function(env, result, testFn, 0, nullptr, nullptr);napi_value value;napi_value key;std::string keyStr = "value";napi_create_string_utf8(env, keyStr.c_str(), keyStr.size(), &key);//4. 使用napi_get_property获取变量valuenapi_get_property(env, result, key, &value);return result
}

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1026145.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子招标采购系统源码之从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理

随着市场竞争的加剧和企业规模的扩大,招采管理逐渐成为企业核心竞争力的重要组成部分。为了提高招采工作的效率和质量,我们提出了一种基于电子化平台的解决方案。该方案旨在通过电子化招投标,使得招标采购的质量更高、速度更快,同…

HBase的Python API(happybase)操作

一、Windows下安装Python库:happybase pip install happybase -i https://pypi.tuna.tsinghua.edu.cn/simple 二、 开启HBase的Thrift服务 想要使用Python API连接HBase,需要开启HBase的Thrift服务。所以,在Linux服务器上,执行如…

亮数据——让你的IP走出去,让价值返回来

亮数据——让你的IP走出去,让价值返回来 前言跨境电商最最最大的痛点——让IP走出去超级代理服务器加速网络免费的代理管理软件亮数据解决痛点亮数据优势介绍亮数据浏览器的使用示例总结 前言 当前社会信息的价值是不可想象的,今天在亮数据中看到了个【…

Jenkins常用插件安装及全局配置

Jenkins常用插件安装及全局配置 前言 ​ Jenkins是一个流行的持续集成工具,通过安装适用的插件,可以扩展Jenkins的功能,并与其他工具和系统集成。本文将介绍一些常用的Jenkins插件以及安装和配置的步骤。通过安装和配置这些常用插件&#xf…

HCIP第二次实验

实验拓扑图: 实验要求: 1、R1和R2使用PPP链路直连,R2和R3把2条PPP链路捆绑为PPP MP直连 2、按照图示配置IP地址 3、R2对R1的PPP进行单向chap验证 4、R2和R3的PPP进行双向chap验证 实验思路: 1、 先按照图示给R1、R2、R3配置好…

C++:变量和常量(3)

变量 什么是变量:变量就是一个装东西的盒子 通俗:变量是用于存放数据的容器。我们通过变量名获取数据,甚至数据可以修改 变量的作用:给指定的内存空间起名,后期通过起的名字就可以调用整个内存空间 定义变量的格式 &a…

关于 C/C++ 1Z(17)开源项目 openppp2 协同程式切换工作流

下述为开源项目 openppp2(github)构建工作在 C/C 17 的 stackful 有栈协同程式的工作流切换示意图: 在 openppp2 之中采用人工手动方式管理协同程式之间的切换,每个中断过程只是保存线程栈信息(如寄存器、当前#PC EIP&…

HTTPS:原理、使用方法及安全威胁

文章目录 一、HTTPS技术原理1.1 主要技术原理1.2 HTTPS的工作过程1.2.1 握手阶段1.2.2 数据传输阶段 1.3 CA证书的签发流程1.4 HTTPS的安全性 二、HTTPS使用方法三、HTTPS安全威胁四、总结 HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket …

我的编程之路:从非计算机专业到Java开发工程师的成长之路 | 学习路线 | Java | 零基础 | 学习资源 | 自学

小伙伴们好,我是「 行走的程序喵」,感谢您阅读本文,欢迎三连~ 😻 【Java基础】专栏,Java基础知识全面详解:👉点击直达 🐱 【Mybatis框架】专栏,入门到基于XML的配置、以…

STM32G4 TIM1触发ADC转换

STM32G4 TIM1触发ADC转换 📍相关篇《HAL STM32G4 ADC手动触发采集各种滤波算法实现》🎈《HAL STM32G4 TIM1 3路PWM互补输出VOFA波形演示》📍《HAL STM32G4内部运放的使用》 ✨继欧拉电子无刷电机驱动相关视频学习 – STM32G4 FOC开发实战—TI…

jenkins+newman+postman持续集成环境搭建

一、Newman简介 Newman是一款基于Node.js开发的,可以运用postman工具直接从命令运行和测试postman集合 二、Newman应用 环境准备:js/ cnpm或npm配置好环境,执行如下命令 三、安装newman 验证是否安装成功,命令:newm…

Ps:照片滤镜

照片滤镜 Photo Filter命令提供了一种快速且直观的方式来模拟传统摄影中使用的彩色滤镜效果。这一功能不仅适用于色彩校正,还可以用于创意色彩调整,以增加视觉吸引力或传达特定的情绪。 Ps菜单:图像/调整/照片滤镜 Adjustments/Photo Filter …

求职MAX版

sangwu 在校-随时到岗 经验:无 本科 20岁 Java开发工程师 全国可飞 薪资可谈 本人优势 不懂劳动法,加班可住公司。稳定性高,不愿意跳槽,能坚守到公司倒闭。各职位都能胜任,性价比高。…

【蓝桥杯选拔赛真题49】C++收集宝石 第十四届蓝桥杯青少年创意编程大赛 算法思维 C++编程选拔赛真题解析

目录 C收集宝石 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 七、推荐资料 C收集宝石 第十四届蓝桥杯青少年创意编程大赛C选拔赛真题 一、题目要求 1、编程实现 聪聪在玩冒险岛游戏,为了…

Android JNI SO库和对应的CPU架构详解

Android JNI SO库和对应的CPU架构详解 文章目录 Android JNI SO库和对应的CPU架构详解一、前言二、Android CPU架构1、Android系统支持的CPU架构2、如查查看手机的CPU架构(1)Android13 大屏AML厂商的cpu信息:(2)电脑An…

【Leetcode每日一题】 递归 - 计算布尔二叉树的值(难度⭐⭐)(44)

1. 题目解析 题目链接:2331. 计算布尔二叉树的值 这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。 2.算法原理 算法思路概述: 问题解释:我们面对的是一个节点可能含有逻辑运算符(AN…

PCL点云处理之M估计样本一致性(MSAC)平面拟合(二百三十六)

PCL点云处理之M估计样本一致性(MSAC)平面拟合(二百三十五六) 一、算法介绍二、使用步骤1.代码2.效果一、算法介绍 写论文当然用RANSAC的优化变种算法MSAC啊,RANSAC太土太LOW了哈哈 MSAC算法(M-estimator Sample Consensus)是RANSAC(Random Sample Consensus)的一种…

git笔记之撤销、回退、reset方面的笔记

git笔记之撤销、回退、reset方面的笔记 code review! 文章目录 git笔记之撤销、回退、reset方面的笔记1.git 已经commit了,还没push,如何撤销到初始状态git reset --soft HEAD~1git reset HEAD~1(等同于 git reset --mixed HEAD~1&#xff0…

探索BPMN:业务流程模型与表示法

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【论文速读】| 对大语言模型解决攻击性安全挑战的实证评估

本次分享论文为:An Empirical Evaluation of LLMs for Solving Offensive Security Challenges 基本信息 原文作者:Minghao Shao, Boyuan Chen, Sofija Jancheska, Brendan Dolan-Gavitt, Siddharth Garg, Ramesh Karri, Muhammad Shafique 作者单位&a…