c++主动调用arkts方法

一文了解HarmonyOS Next ArkTS与C++数据类型转换 本文介绍了C++与TS各自数据类型与互相之间的数据类型转换,在需要使用C++模块时可以快速上手对各种数据类型进行转换。 阅读详情

整体思路:arkts使用多线程的方式向c++传递回调方法,c++使用多线程调用回调方法。

定义方法

src/main/cpp/types/libentry/Index.d.ts

export const setCallback: (cb: (a: number) => number) => number;

新建线程,传递回调方法

src/main/ets/entryability/NativePlugin.ets
 

import tunnel from 'libentry.so';
import { taskpool } from '@kit.ArkTS';

@Concurrent
function callbackFun(c: number,b:number){
  tunnel.setCallback((a: number)=>{
    console.log('cb~~ result: %d', a, b);
    return 0;
  });
}


let task:taskpool.Task = new taskpool.Task(callbackFun,5,4);

// 执行多线程任务

taskpool.execute(task, taskpool.Priority.HIGH);

c++多线程执行回调

src/main/cpp/NativeAPI.cpp

#include <thread>

// Global reference to store the JavaScript callback

napi_ref callbackRef;

napi_env globalEnv;


void CallJSCallback(int result) {

    napi_handle_scope scope;

    napi_open_handle_scope(globalEnv, &scope);

    napi_value callback;

    napi_get_reference_value(globalEnv, callbackRef, &callback);

    napi_value global;

    napi_get_global(globalEnv, &global);
    
    napi_value argv[1];

    napi_create_int32(globalEnv, result, &argv[0]);

    napi_call_function(globalEnv, global, callback, 1, argv, nullptr);

    napi_close_handle_scope(globalEnv, scope);

}



void AsyncWork() {

    std::this_thread::sleep_for(std::chrono::seconds(1)); // Simulate some async work

    CallJSCallback(42); // Call the JS callback with the result

}



// Native method to set the callback

napi_value SetCallback(napi_env env, napi_callback_info info) {

    size_t argc = 1;

    napi_value args[1];



    napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);

    globalEnv = env; // Store the environment for later use

    napi_create_reference(env, args[0], 1, &callbackRef); // Store the callback reference

    // Start async work in a new thread

    std::thread worker(AsyncWork);

    worker.detach(); // Detach the thread so it can run independently



    return nullptr; // Return nothing

}



// 执行回调

CallJSCallback(11);



// 绑定映射

{ "setCallback", 0, SetCallback, 0, 0, 0, napi_default, 0 },

【HarmonyOS】ArkTS Native开发——使用 system函数创建文件 首先src目录下有两个文件夹cpp和ets,cpp目录主要是用来定义对外的接口实现(index.d.ts),C++代码功能实现(hello.cpp)和编译的工具链(CMakeLists.txt)。这边有一个需要注意的地方是创建的文件目录路径必须是应用的私有文件目录下(/data/data/包名/文件名),否则文件不能创建成功。然后在ets目录下index.ets中就可以导入这个libentry.so的静态库文件,使用定义的方法了。),本文将在Native应用中使用C/C++的system方法创建一个文件。 阅读详情

相关推荐

使用DevEco Studio高效开发(ArkTS)

介绍本篇Codelab主要介绍使用DevEco Studio开发工具,高效开发登录应用的案例。使用开发工具以下功能:使用DevEco Studio开发工具的预览器适配多设备页面。使用DevEco Studio开发工具运行和调试代码。使用DevEco Studio开发工具测试代码。

csdndevpress0028的博客 6869

HarmonyOS ArkTS与c++交互通信

通过缓存的env,callback对象,调用napi_call_function方法将数据传回给ts。NAPI中缓存回调接口的变量,便于后面回调给TS。

Ada的专栏 6047

【鸿蒙实战开发】基于Napi调用ArkTS/系统接口

app应用在native侧调用 系统库/arkts模块的方法。应用经常会遇到如下的业务诉求:场景一:系统提供了ArkTS 接口,但未提供对应的NDK接口,当伙伴使用C++ 代码实现业务逻辑时,部分系统能力需要依赖系统ArkTS接口;场景二: 系统仅提供了ArkTS 异步接口,未提供对应的NDK接口,当伙伴使用C++ 代码实现业务逻辑时,部分系统能力需要依赖系统ArkTS 异步接口;

HarmonyOSMN的博客 1359

【HarmonyOS NEXT】C++开发,如何调用ArkTS代码

在HarmonyOS中,C API中的N-API接口可以实现ArkTS/TS/JS与C/C++之间的交互。鸿蒙开发中C++如何调用ArkTS代码,例如C++回调如何通知到TS,能否给出实例。C++回调 / ArkTS / N-API。

Mayism123的博客 2833

【HarmonyOS NEXT】C++开发,napi_call_function接口是否支持反射同步的调用ArkTS中的方法

napi_call_function接口,文档上描述它是native层调用ArkTS。在官方Demo中,有展示它的用法,但是是一个异步调用的示范。如何实现napi_call_function在传入合适的入参后,同步去调用ArkTS上的某个已存在的方法。napi_call_function / 反射同步 / 调用ArkTS / napi_get_named_property。推荐使用napi_get_named_property接口来调用JS侧传递给C++侧的参数中的特定方法。是否有更加详细的文档介绍?

Mayism123的博客 2511

ArkTS与C++数据类型转换

对于字符串和object对象处理稍微复杂些,通过napi_get_value_string_utf8将js的字符串对象转换为c++的std::string对象。上面代码通过napi_get_value_int32将TS中的number转换为int赋值给intValue变量。第三个参数传入空时,只会获取字节流大小。接下来就可以从args中分别读取ArkTS传来的参数信息,下面介绍如何进行类型转换。上面方法就是封装了一个转换字符串对应的工具函数。

Android8.x和Android9.x平台user版本打开UART输出并支持控制台输入和user版本adb root的方法 1185

鸿蒙Electron-Electron调用鸿蒙原生arkts

鸿蒙版Electron 如何使用Electron调用原生arkts方法,Electron鸿蒙交互,Electron鸿蒙通信

DEJKS的博客 251

Napi助你轻松调用ArkTS系统接口

步骤四:获取方法并调用demo示例(获取/ets/common/ObjectUtil 的isNull方法,并调用isNull方法判断一个对象是否为null)系统仅提供了ArkTS 异步接口,未提供对应的NDK接口,当伙伴使用C++ 代码实现业务逻辑时,部分系统能力需要依赖系统ArkTS 异步接口;伙伴在 ArkTS/TS 侧已定义接口,当伙伴使用C++ 代码实现业务逻辑时,想直接使用已有的TS 接口;app应用在native侧调用 系统库/arkts模块的方法。例如: 获取设备的屏幕宽高。

CTrup的博客 865

使用 DevEco 一键生成 ArkTS 调用 C++ 的胶水代码

使用 DevEco 一键生成 ArkTS 调用 C++ 的胶水代码

biangechengxu的博客 1107

关于MII、RMII、GMII、RGMII、PHY、网络变压器、RJ45的硬件总结

文章目录前言一、网络传输结构及原理1.以太网的工作原理2.TCP/IP协议3.数据链路层(MAC)二、介质独立接口MII,RMII,GMII,RGMII1.MII(Media Independent interface)2.RMII(Reduced Media Independent Interface)3.GMII(Gigabit Medium Independent)4.RGMII(Reduced Gigabit Media Independent Interface)三、物理层芯片(PHY)二、使用步

weixin_44415816的博客 3万+

【阿里云大模型高级工程师ACP习题集】2.9 大模型应用生产实践(下篇)

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 2232

ArkTs与C++之间的类型转换

img: string // 头像name: string // 名称content: string // 聊天内容bottom: string // 背景颜色time: string // 上次聊天时间我们希望 ArkTS 调用 C++ 接口函数返回类型为的数组,以供内部需求。首先,在文件Index.d.ts然后,在文件中配置模块描述信息,设置 Init 方法为 napi_module 的入口方法。修饰的方法由系统自动调用,使用 NAPI 接口传入模块描述信息进行模块注册,属性。

m0_63086198的博客 1390

【机电杂谈2】BLDC和PMSM的特点和区别

在日常生活中,小到电动玩具,大到电动汽车,永磁电机的身影可以说是无处不在。有刷直流电机、无刷直流电机、永磁同步电机由于其结构和输出特定的不同也被应用到不同的场合。如果你经常拆一些玩具和家电,就会看到大量的有刷直流电机和无刷直流电机,而永磁同步电机主要应用在高精度的工业伺服和电动汽车领域。本文就从电机的结构和控制方面,对这几种常见的永磁电机做简单的梳理和归纳。

2933

鸿蒙NEXT版实战开发:如何在C++调用从ArkTS传递过来的function?

如何在C++调用从ArkTS传递过来的function..........

qq_39652397的博客 645

GD32F303 Keil 工程项目从零搭建实战指南

本文是一份详细的GD32F303 Keil工程项目从零搭建实战指南。文章阐述了亲手搭建工程的重要性,并逐步指导开发者完成从环境准备、目录规划、工程创建、文件添加、关键配置到编译调试的全过程。重点讲解了如何正确选择启动文件、添加外设库、配置头文件路径和全局宏,旨在帮助开发者深入理解工程结构,掌握GD32F303开发的核心技能,实现从“会用”到“懂”的跨越。

weixin_29190651的博客 404

2026.5.3:Ubuntu26.04下uv所需的环境变量pyproject.toml

本文档提供了Python开发环境的配置指南。主要包括: 设置环境变量(HF_ENDPOINT、UV_PYTHON_INSTALL_MIRROR等) 创建pyproject.toml配置文件,定义项目元数据(名称、版本等) 指定依赖项(torch系列库)及其安装源(PyTorch官方CUDA 12.8镜像) 配置Python版本要求(>=3.13,<3.14) 设置平台限制(Linux/Windows) 该配置适用于需要PyTorch CUDA 12.8支持的项目开发环境搭建。

拥抱具身智能,昇腾Ascend C 586

在 HarmonyOS/鸿蒙PC ArkTS 侧调用 C/C++ 三方库完整指南

本文介绍了在鸿蒙应用开发中集成C/C++三方库的完整流程,以libmediainfo为例,重点讲解了如何通过NAPI机制实现ArkTS与C/C++的交互。文章对比了直接链接和dlopen动态加载两种集成方式,推荐使用直接链接方法,并详细说明了项目结构设计、SO文件放置、头文件管理和NAPI桥接层的实现。通过编写C++包装代码,将三方库的C接口转换为ArkTS可调用的NAPI接口,最终实现在鸿蒙应用中调用libmediainfo库解析媒体文件信息的功能。

猫哥 的沉淀、积累、总结。天天学习,好好向上...c/c++,嵌入式 linux,Android,HarmonyOS,AIOT) 987

华为OD机试真题 新系统 9月20号 【字符串分组求和】

华为OD新系统机试真题【字符串分组求和】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【字符串分组求和】解析。

qq_45776114的博客 602

cocos2dx-鸿蒙ArkTS与CPP交互

本文从 Cocos2d-x 鸿蒙源码出发,详细梳理 ArkTS 与 C++ 之间的双向交互机制,包括 NAPI 模块的注册与初始化、ArkTS 通过 getContext 调用 C++、C++ 通过 registerFunction 反向调用 ArkTS,以及 Promise 异步调用的实现流程。同时结合实际开发,介绍新增 Native 接口时 GetContext、index.d.ts 等位置的注册方式,并分析异步调用、线程切换等容易踩坑的问题

Tony-Chen的博客 235

Codex 100个真实案例 - 用AI做英语单词计划学习工具(记忆曲线+测验)

背单词是英语学习的基本功,但市面上的背单词 APP 要么收费、要么广告太多。本案例用 Codex 从零打造一个 **英语单词计划学习工具**,实现 SM-2 间隔重复算法(Anki 的核心算法)、单词本增删改查、多种测验模式(选择题/拼写/听写)、TTS 发音播放,以及学习数据的可视化统计图表。全程用自然语言驱动 Codex,用 Python 写后端逻辑 + 终端 UI,打造你的私人背单词助手!

yueyeguzhuo的专栏 191

【实战】小红书笔记爬虫终极指南:模拟滑动加载,抓取图文(2026最新版)

小红书作为国内最大的生活方式分享社区,每天产生海量的图文笔记。对于数据分析、市场调研、竞品分析等需求,爬取小红书公开笔记成为一项常见任务。然而,小红书的反爬机制日益升级——接口加密、动态Token、滑动验证、设备指纹……本文将深入剖析小红书Web端和App端的爬取技术,手把手教你用Python实现模拟滑动加载、自动抓取图文笔记的完整爬虫系统。全文包含大量代码、原理分析和排坑经验,适合有一定爬虫基础的读者进阶学习。目录前言一、小红书反爬机制概览二、环境准备2.1 Python环境2.2 浏览器驱动。

2201_76125261的博客 757

掌握DevEco Studio这一功能,高效实现ArkTS与C++胶水代码

本文主要介绍了Native C++代码的实现步骤,以及DevEco Studio IDE提供的跨语言代码编辑工具,实现只写函数声明一键帮助我们生成对应初始化注册方法与C++实现方法,希望大家多多体验,通过工具提升我们开发效率。

轻口味的专栏 1495

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

OpenHarmony5.0之竖向通信:arkts调用cpp代码

摘要:本文分析了ArkTS与C++在OpenHarmony系统中的竖向通信机制,以屏幕刷新率设置为例展开说明。在Settings应用中通过settings.setValueSync接口调用,最终通过NAPI机制转换为C++实现。具体流程涉及数据共享服务(DataShareHelper)进行URI处理,实现键值对更新操作。文章详细展示了NAPI接口注册、函数实现和日志追踪过程,并建议使用HiSimplePerf工具抓取trace进行深入分析。该机制体现了OpenHarmony中应用层与框架层之间的跨语言通信实

Mad_Developer 262

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

上一篇: HarmonyOS 创建 createAudioCapturer 时候报错误码 6800301
下一篇: 鸿蒙webview中加载本地网页带锚点url跨域问题
chenbin___
博客等级 码龄5年 85粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值