0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于OpenHarmony开发板上测试Native C++应用开发

电子发烧友开源社区 来源:电子发烧友开源社区 作者:电子发烧友开源社 2022-10-08 14:37 次阅读

本文主要分享在软通动力扬帆系列“竞”OpenHarmony开发板上测试Native C++应用开发,实现eTS调用Native C++ 程序实现对给定的两个数进行加减乘除运算示例(eTS)

1.新建OpenHarmony Native C++工程

选择File->New->Create Project -> OpenHarmony -> Native C++点击Next

d1b01fda-46c1-11ed-96c9-dac502259ad0.png

输入Project name,选择SDK版本9

d1dc80ac-46c1-11ed-96c9-dac502259ad0.png

点击Finish,如果Native SDK 没有下载则会出现以下界面,点击Configure Now

d22dafa4-46c1-11ed-96c9-dac502259ad0.png

下载Native SDK

d27395b4-46c1-11ed-96c9-dac502259ad0.png

Native SDK下载完成后点击Finish 进入工程

d2cdab3a-46c1-11ed-96c9-dac502259ad0.png

2.源码修改

2.1 工程主要文件说明

工程初始化后目录结构如下图,主要文件为红色框内文件

d2e93d64-46c1-11ed-96c9-dac502259ad0.png

主要文件文件说明如下:

├── cpp:C++代码区         
│  ├── types:                     // 接口存放文件夹
│  │  └── libentry       
│  │    ├── index.d.ts               // 接口文件
│  │    └── package.json              // 接口注册配置文件
│  ├── CmakeList.txt                  // Cmake打包配置文件
│  └── hello.cpp                    // C++源代码
└── ets                         // ets代码区
  └── Application
  │  └── AbilityStage.ts               // Hap包运行时类
  ├── MainAbility
  │  └── MainAbility.ts               // Ability,提供对Ability生命周期、上下文环境等调用管理
  └── pages
    └── index.ets                  // 主页面

(左右移动查看全部内容)

2.2 cpp源码编写

自带的案例已经实现了加法运算的接口,本案例在此基础上加入减法乘法除法,entrysrcmaincpphello.cpp主要修改如下

参考“Add”方法,实现Sub、Mul、Div

static napi_value Sub(napi_env env, napi_callback_info info)
{
  size_t requireArgc = 2;
  size_t argc = 2;
  napi_value args[2] = {nullptr};


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


  napi_valuetype valuetype0;
  napi_typeof(env, args[0], &valuetype0);


  napi_valuetype valuetype1;
  napi_typeof(env, args[1], &valuetype1);


  double value0;
  napi_get_value_double(env, args[0], &value0);


  double value1;
  napi_get_value_double(env, args[1], &value1);


  napi_value sum;
  napi_create_double(env, value0 - value1, &sum);


  return sum;


}
static napi_value Mul(napi_env env, napi_callback_info info)
{
  size_t requireArgc = 2;
  size_t argc = 2;
  napi_value args[2] = {nullptr};


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


  napi_valuetype valuetype0;
  napi_typeof(env, args[0], &valuetype0);


  napi_valuetype valuetype1;
  napi_typeof(env, args[1], &valuetype1);


  double value0;
  napi_get_value_double(env, args[0], &value0);


  double value1;
  napi_get_value_double(env, args[1], &value1);


  napi_value sum;
  napi_create_double(env, value0*value1, &sum);


  return sum;


}
static napi_value Div(napi_env env, napi_callback_info info)
{
  size_t requireArgc = 2;
  size_t argc = 2;
  napi_value args[2] = {nullptr};


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


  napi_valuetype valuetype0;
  napi_typeof(env, args[0], &valuetype0);


  napi_valuetype valuetype1;
  napi_typeof(env, args[1], &valuetype1);


  double value0;
  napi_get_value_double(env, args[0], &value0);


  double value1;
  napi_get_value_double(env, args[1], &value1);


  napi_value sum;
  napi_create_double(env, value0/value1, &sum);


  return sum;


}

(左右移动查看全部内容)

Init中注册对外接口名为“sub”、“mul”、“div”

EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports)
{
  napi_property_descriptor desc[] = {
    { "add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr },
    { "sub", nullptr, Sub , nullptr, nullptr, nullptr, napi_default, nullptr },
    { "mul", nullptr, Mul , nullptr, nullptr, nullptr, napi_default, nullptr },
    { "div", nullptr, Div , nullptr, nullptr, nullptr, napi_default, nullptr },
  };
  napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
  return exports;
}
EXTERN_C_END

(左右移动查看全部内容)

2.3 index.d.ts接口文档编写

src/main/cpp/types/libentry/index.d.ts添加以下接口:

export const sub: (a: number, b: number) => number;
export const mul: (a: number, b: number) => number;
export const div: (a: number, b: number) => number;

(左右移动查看全部内容)

2.4 界面实现

src/main/ets/pages/index.ets中通过import testNapi from 'libentry.so'引入SO包,当点击按钮时调用对应的方法

import testNapi from 'libentry.so'


@Entry
@Component
struct Index {
 private textInputController1: TextInputController = new TextInputController()
 private textInputController2: TextInputController = new TextInputController()
 private tittle: string = '调用C标准库示例'
 private message: string = '对给定的两个数进行加减乘除运算'
 private tipsNum1: string = '请输入第一个数:'
 private tipsNum2: string = '请输入第二个数:'
 private tipsResult: string = '结果:'
 private buttonAdd: string = '加'
 private buttonSub: string = '减'
 private buttonMul: string = '乘'
 private buttonDiv: string = '除'
 @State result: number = 0
 @State num1: number = 0.0
 @State num2: number = 0.0


 build() {
  Row() {
   Column() {
    Row(){
     Text(this.tittle).height('100%').align(Alignment.Center).fontSize(40).fontWeight(800)
    }.height('10%').width('100%').justifyContent(FlexAlign.Center)
    Row(){
     Text(this.message).height('100%').align(Alignment.Center).fontSize(24).fontWeight(500)
    }.height('15%').width('100%').justifyContent(FlexAlign.Center)
    Row(){
     Text(this.tipsNum1).fontColor(Color.Black).fontSize(24).width('30%').height('100%').margin({left:30})
     TextInput({ placeholder: '请输入第一个数字:', controller:this.textInputController1}).type(InputType.Number)
      .height('100%').width('60%').margin({left:10,right:30})
      .onChange(value =>{this.num1 = parseFloat(value)})
    }.height('5%').width('100%').justifyContent(FlexAlign.Start)
    Row(){
     Text(this.tipsNum2).fontColor(Color.Black).fontSize(24).width('30%').height('100%').margin({left:30})
     TextInput({ placeholder: '请输入第二个数字:', controller:this.textInputController2}).type(InputType.Number)
      .height('100%').width('60%').margin({left:10,right:30})
      .onChange(value =>{this.num2 = parseFloat(value)})
    }.height('5%').width('100%').margin({top:20})
    Row(){
     Text(this.tipsResult).fontColor(Color.Black).fontSize(24).width('40%').height('100%').margin({left:30})
     Text(''+this.result).fontColor(Color.Black).fontSize(30).width(60).height(200).width('60%').height('100%')
    }.height('10%').width('100%').touchable(false)
    Row(){
     Button(this.buttonAdd)
      .fontSize(40)
      .fontWeight(FontWeight.Bold)
      .margin({top:5})
      .height(100)
      .width(100)
      .onClick(() => {
       this.result = testNapi.add(this.num1,this.num2)
      })
     Button(this.buttonSub)
      .fontSize(40)
      .fontWeight(FontWeight.Bold)
      .margin({top:5})
      .height(100)
      .width(100)
      .onClick(() => {
       this.result = testNapi.sub(this.num1,this.num2)
      })
     Button(this.buttonMul)
      .fontSize(40)
      .fontWeight(FontWeight.Bold)
      .margin({top:5})
      .height(100)
      .width(100)
      .onClick(() => {
       this.result = testNapi.mul(this.num1,this.num2)
      })
     Button(this.buttonDiv)
      .fontSize(40)
      .fontWeight(FontWeight.Bold)
      .margin({top:5})
      .height(100)
      .width(100)
      .onClick(() => {
       this.result = testNapi.div(this.num1,this.num2)
      })
    }.height('30%').width('100%').justifyContent(FlexAlign.Center)
   }
   .width('100%')
  }
  .height('100%')
 }
}

(左右移动查看全部内容)

3.运行效果演示

签名后运行效果如下:

加法:

d320b014-46c1-11ed-96c9-dac502259ad0.jpg

减法:

d3679b64-46c1-11ed-96c9-dac502259ad0.jpg

乘法:

d39ade7a-46c1-11ed-96c9-dac502259ad0.jpg

除法:

d3b7e9fc-46c1-11ed-96c9-dac502259ad0.jpg

审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 接口
    +关注

    关注

    33

    文章

    8568

    浏览量

    150996
  • C++
    C++
    +关注

    关注

    22

    文章

    2108

    浏览量

    73608
  • 开发板
    +关注

    关注

    25

    文章

    5027

    浏览量

    97357
  • OpenHarmony
    +关注

    关注

    25

    文章

    3711

    浏览量

    16247

原文标题:扬帆系列“竞”OpenHarmony开发板实现对给定的两个数进行加减乘除运算

文章出处:【微信号:HarmonyOS_Community,微信公众号:电子发烧友开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    【软通动力鸿湖万联扬帆系列“竞”开发板试用体验】Native C++应用Demo示例(eTS)

    OpenHarmony开发板测试Native C++应用
    的头像 发表于 10-13 10:19 1057次阅读
    【软通动力鸿湖万联扬帆系列“竞”<b class='flag-5'>开发板</b>试用体验】<b class='flag-5'>Native</b> <b class='flag-5'>C++</b>应用Demo示例(eTS)

    鸿蒙next开发-OpenHarmony的NDK开发

    Native API是OpenHarmony SDK提供的一组native开发接口与工具集合(也称为NDK),方便
    的头像 发表于 01-20 11:35 1783次阅读
    鸿蒙next<b class='flag-5'>开发</b>-<b class='flag-5'>OpenHarmony</b>的NDK<b class='flag-5'>开发</b>

    鸿蒙OS开发实例:【Native C++

    使用DevEco Studio创建一个Native C++应用。应用采用Native C++模板,实现使用NAPI调用C标准库的功能。使用
    的头像 发表于 04-14 11:43 2581次阅读
    鸿蒙OS<b class='flag-5'>开发</b>实例:【<b class='flag-5'>Native</b> <b class='flag-5'>C++</b>】

    【软通动力鸿湖万联扬帆系列“竞”开发板试用体验】试用测评报告五 –开源鸿蒙C/C++软件开发

    鸿湖万联扬帆系列“竞”开发板试用测评报告五 –开源鸿蒙C/C++软件开发大信(QQ:8125036)在成功的建立了开源鸿蒙的集成开发环境以后
    发表于 09-22 17:29

    【软通动力鸿湖万联扬帆系列“竞”开发板试用体验】Native C++应用Demo示例(eTS)

    本文主要分享在软通动力扬帆系列“竞”OpenHarmony开发板测试Native C++应用
    发表于 10-06 00:12

    如何使用DevEco Studio创建Native C++应用

    展示点击输入框输入两个数,再点击计算按钮调用接口,将数据传入到C++端,C++端计算后再作为返回值到ArkTS端。环境搭建我们首先要完成应用开发环境的搭建,本示例运行RK3568开发板
    发表于 02-22 14:24

    openharmony开发openharmony开发板

    现在市面上支持OpenHarmony开发板已经非常多了,OpenHarmony不仅仅只能在海思系列芯片运行,比较常见的有HiSpark、小熊派系列。这些
    的头像 发表于 06-24 09:03 3667次阅读

    OpenHarmony3.0编译C控制Hi3516开发板的LED闪烁

    使用的是比较新的 OpenHarmony 3.0 LTS 版本,Linux 内核,编译标准系统。 官方文档已经说明了,如何使用 DevEco Studio 开发 hap 包,并运行在开发板,但是 ACE
    的头像 发表于 09-28 09:42 3676次阅读
    <b class='flag-5'>OpenHarmony</b>3.0<b class='flag-5'>上</b>编译<b class='flag-5'>C</b>控制Hi3516<b class='flag-5'>开发板</b>的LED闪烁

    如何移植OpenHarmony 3.0 到星空派开发板

    9 月 30 日,OpenHarmony 3.0 LTS 版本发布。本文将介绍如何移植 OpenHarmony 3.0 到星空派开发板。 星空派
    的头像 发表于 10-19 09:08 2476次阅读
    如何移植<b class='flag-5'>OpenHarmony</b> 3.0 到星空派<b class='flag-5'>开发板</b><b class='flag-5'>上</b>

    如何把OpenHarmony烧录进博流BL-HWC-G1开发板

    作者:HonestQiao|乔楚 在上一篇【博流 BL-HWC-G1 开发板试用】开箱及编译烧录官方程序(BL602 IoT SDK)中,我们讲了这块开发板使用官方SDK进行编译烧录,这一篇,我们
    的头像 发表于 11-08 09:59 2471次阅读
    如何把<b class='flag-5'>OpenHarmony</b>烧录进博流BL-HWC-G1<b class='flag-5'>开发板</b><b class='flag-5'>上</b>

    怎么样把OpenHarmony烧录到开发板

      在上一篇【博流 BL-HWC-G1 开发板试用】开箱及编译烧录官方程序(BL602 IoT SDK)中,我们讲了这块开发板使用官方SDK进行编译烧录,这一篇,我们来讲OpenHarmony的编译
    的头像 发表于 11-10 09:17 1846次阅读
    怎么样把<b class='flag-5'>OpenHarmony</b>烧录到<b class='flag-5'>开发板</b><b class='flag-5'>上</b>

    OpenHarmony开发板适配经验分享--王城

    OpenHarmony开发板适配经验分享 审核编辑:金巧
    的头像 发表于 12-28 14:46 1717次阅读
    <b class='flag-5'>OpenHarmony</b><b class='flag-5'>开发板</b>适配经验分享--王城

    如何使用DevEco Studio创建Native C++应用

    for OpenAtom OpenHarmony (以下简称“OpenHarmony”)创建一个Native C++应用。应用采用“Native
    的头像 发表于 02-21 14:30 1411次阅读

    开发板如何适配OpenHarmony 3.2

    科技基于RK3568设计的HCPAD-100开发板以及基于RK3566设计的中控屏HongzPad2022在OpenHarmony 3.2 Beta5版本的适配过程。 涉及到开发板
    的头像 发表于 04-04 01:35 1487次阅读

    OpenHarmony C++公共基础类库应用案例:HelloWorld

    1、程序简介该程序是基于OpenHarmonyC++公共基础类库的简单案例:HelloWorld。该应用案例已在OpenHarmony凌蒙派-RK3568开发板(即
    的头像 发表于 11-23 08:22 695次阅读
    <b class='flag-5'>OpenHarmony</b> <b class='flag-5'>C++</b>公共基础类库应用案例:HelloWorld