前言

        书接上一章,上一篇文章,介绍了如何创建Native C++工程,并且经过配置,可以运行在模拟器上。这篇主要详细介绍一下ArkTS/JS侧Native侧如何交互,简言之,就是用ArkTS语言调用C++编写的程序。本章以在ArkTS/JS侧调用add()接口、在Native侧实现Add()接口,从而实现跨语言交互为例,呈现使用Node-API进行跨语言交互的流程。如何创建工程,就不再赘述了。还是那句话,建议看官方文档,我只是搬运加整合工。

简介

  • ArkTS/JS侧:实现C++方法的调用。代码比较简单,import一个对应的so库后,即可调用C++方法。

  • Native侧:.cpp文件,实现模块的注册。需要提供注册lib库的名称,并在注册回调方法中定义接口的映射关系,即Native方法及对应的JS/ArkTS接口名称等。

Native侧

  • 设置模块注册信息

         ArkTS侧import native模块时,会加载其对应的so。加载so时,首先会调用napi_module_register方法,将模块注册到系统中,并调用模块初始化函数。

        napi_module有两个关键属性:一个是.nm_register_func,定义模块初始化函数;另一个是.nm_modname,定义模块的名称,也就是ArkTS侧引入的so库的名称,模块系统会根据此名称来区分不同的so。

以下代码无须复制,创建Native C++工程以后在napi_init.cpp代码中已配置好。

  • 模块初始化,实现ArkTS接口与C++接口的绑定和映射

注意绑定时的大小写,这个影响ArkTS/JS端的方法

在index.d.ts文件中,提供ArkTS/JS端的接口方法

在oh-package.json5文件中将index.d.ts与cpp文件关联起来。

其实是index.d.ts与库文件关联起来

实现Native侧的Add接口

        其实上面Add接口,刚开始的看是怪怪的,没有体现出可以用C/C++。其实,改动一下就可以看出来了,我把运算过程提取出来,如下图所示:计算一个8+8(在Index.et中修改)。利用这种思想,是不是就可以把其他复杂业务逻辑和算法,放到纯C/C++的文件中,最终只转换屈指可数的几个启动和交互接口就可以了。

ArkTS侧

        ArkTS侧调用C/C++方法实现,如下图所示,Demo都写好了,我自己稍微改动了一下,这样就能在模拟机上看到结果了,其实也可以通过日志打印去看结果。

有时间补上Node-API常用接口的解释

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐