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

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

3天内不再提示

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

开发板试用精选 来源:开发板试用 作者:电子发烧友论坛 2022-10-13 10:19 次阅读

本文来源电子发烧友社区,作者:soon顺soon, 帖子地址:https://bbs.elecfans.com/jishu_2308771_1_1.html



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

1.新建OpenHarmony Native C++工程

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

输入Project name,选择SDK版本9

CreateProject2.png

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

CreateProject3.png

下载Native SDK
SDK.png

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

2.源码修改

2.1 工程主要文件说明

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

project_file.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 运行效果演示

签名后运行效果如下

加法

加法.jpg

减法

减法.jpg

乘法
乘法.jpg

除法

除法.jpg

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

    关注

    22

    文章

    2108

    浏览量

    73623
  • 软通动力
    +关注

    关注

    1

    文章

    787

    浏览量

    15143
  • 鸿湖万联
    +关注

    关注

    1

    文章

    67

    浏览量

    634
收藏 人收藏

    评论

    相关推荐

    鸿亮相OpenHarmony人才生态大会2024

    近日,由开放原子开源基金会指导,OpenHarmony项目群工作委员会主办的OpenHarmony人才生态大会2024在武汉隆重举办。动力子公司鸿
    的头像 发表于 11-30 10:41 271次阅读

    动力携子公司鸿通教育助阵首届鸿蒙生态大会成功举办

    11月23日·中国深圳,首届鸿蒙生态大会上,动力动力子公司鸿
    的头像 发表于 11-29 10:25 172次阅读
    <b class='flag-5'>软</b>通<b class='flag-5'>动力</b>携子公司<b class='flag-5'>鸿</b><b class='flag-5'>湖</b><b class='flag-5'>万</b><b class='flag-5'>联</b>、<b class='flag-5'>软</b>通教育助阵首届鸿蒙生态大会成功举办

    双双入选!动力及子公司鸿当选GIIC联盟理事单位

    智能物联网操作系统研发和产业化服务的较早参与者、鸿蒙生态建设的先锋企业,动力及其子公司鸿
    的头像 发表于 11-29 09:58 113次阅读
    双双入选!<b class='flag-5'>软</b>通<b class='flag-5'>动力</b>及子公司<b class='flag-5'>鸿</b><b class='flag-5'>湖</b><b class='flag-5'>万</b><b class='flag-5'>联</b>当选GIIC联盟理事单位

    动力及子公司鸿当选GIIC联盟理事单位

    操作系统研发和产业化服务的较早参与者、鸿蒙生态建设的先锋企业,动力及其子公司鸿双双被授
    的头像 发表于 11-24 11:43 317次阅读

    动力子公司鸿发布SwanLinkOS 5

    在近日圆满闭幕的首届H•I³ AI探索峰会上,动力凭借其深厚的技术实力与创新精神,在鸿蒙生态领域再次迈出坚实步伐。会上,动力携手子公司鸿
    的头像 发表于 09-04 16:50 821次阅读

    动力子公司鸿重磅发布SwanLinkOS 5,擘画开源鸿蒙AI PC新篇章

    在刚刚落下帷幕的首届H•I³AI探索峰会上,动力再次于鸿蒙生态领域实现突破。此次活动中,动力高级副总裁、鸿
    的头像 发表于 09-03 11:37 545次阅读
    <b class='flag-5'>软</b>通<b class='flag-5'>动力</b>子公司<b class='flag-5'>鸿</b><b class='flag-5'>湖</b><b class='flag-5'>万</b><b class='flag-5'>联</b>重磅发布SwanLinkOS 5,擘画开源鸿蒙AI PC新篇章

    动力子公司鸿荣获矿鸿OSV生态合作伙伴授牌

    圆满举行。此次授牌旨在表彰和认可矿鸿生态圈内的优秀合作伙伴,激发矿鸿领域新动能。动力子公司鸿
    的头像 发表于 08-14 17:58 324次阅读
    <b class='flag-5'>软</b>通<b class='flag-5'>动力</b>子公司<b class='flag-5'>鸿</b><b class='flag-5'>湖</b><b class='flag-5'>万</b><b class='flag-5'>联</b>荣获矿<b class='flag-5'>鸿</b>OSV生态合作伙伴授牌

    动力旗下鸿荣获矿鸿OSV生态合作伙伴授牌

    近日,鄂尔多斯临港经济区见证了矿鸿OSV生态合作伙伴授牌仪式的隆重举行。在这场汇聚行业精英的盛会中,动力旗下的鸿
    的头像 发表于 08-14 14:50 561次阅读

    动力子公司鸿携多款重磅创新产品亮相华为开发者大会

    如何引领行业进步,共同探索鸿蒙生态与AI大模型的发展新契机。作为本次大会钻石级合作伙伴,动力携子公司鸿
    的头像 发表于 06-25 11:38 350次阅读
    <b class='flag-5'>软</b>通<b class='flag-5'>动力</b>子公司<b class='flag-5'>鸿</b><b class='flag-5'>湖</b><b class='flag-5'>万</b><b class='flag-5'>联</b>携多款重磅创新产品亮相华为<b class='flag-5'>开发</b>者大会

    动力子公司鸿获评首批华为矿鸿OSV伙伴

    产业的新技术、新产品、新工艺、新成果,助力煤炭全产业链实现转型突破,并打造一个专业化、国际化、市场化、高水平的煤炭及能源成果交流交易平台,以促进煤炭及能源产业的合作与发展。动力子公司鸿
    的头像 发表于 05-18 09:42 455次阅读
    <b class='flag-5'>软</b>通<b class='flag-5'>动力</b>子公司<b class='flag-5'>鸿</b><b class='flag-5'>湖</b><b class='flag-5'>万</b><b class='flag-5'>联</b>获评首批华为矿<b class='flag-5'>鸿</b>OSV伙伴

    鸿生态“加速跑” 动力子公司鸿荣膺华为“矿鸿生态使能合作伙伴”

    。在本次展会上,动力子公司鸿受邀参与了华为矿鸿
    的头像 发表于 04-02 15:43 562次阅读
    矿<b class='flag-5'>鸿</b>生态“加速跑” <b class='flag-5'>软</b>通<b class='flag-5'>动力</b>子公司<b class='flag-5'>鸿</b><b class='flag-5'>湖</b><b class='flag-5'>万</b><b class='flag-5'>联</b>荣膺华为“矿<b class='flag-5'>鸿</b>生态使能合作伙伴”

    共谱开源新篇章 动力子公司鸿与鸿蒙生态服务公司签署战略合作协议

    近日,动力子公司鸿与鸿蒙生态服务(深圳)有限公司(以下简称“鸿蒙生态服务公司”)成功签
    的头像 发表于 04-02 15:23 483次阅读
    共谱开源新篇章 <b class='flag-5'>软</b>通<b class='flag-5'>动力</b>子公司<b class='flag-5'>鸿</b><b class='flag-5'>湖</b><b class='flag-5'>万</b><b class='flag-5'>联</b>与鸿蒙生态服务公司签署战略合作协议

    人才储备再升级!动力子公司鸿多名讲师荣获首批“鸿蒙原生应用开发培训讲师”认证

    近日,由鸿蒙生态服务公司组织开展的国内首批“鸿蒙原生应用开发培训讲师”认证顺利完成。作为此次认证的重要参与者,鸿申报的四位鸿蒙资深专家
    的头像 发表于 03-25 10:25 615次阅读
    人才储备再升级!<b class='flag-5'>软</b>通<b class='flag-5'>动力</b>子公司<b class='flag-5'>鸿</b><b class='flag-5'>湖</b><b class='flag-5'>万</b><b class='flag-5'>联</b>多名讲师荣获首批“鸿蒙原生应用<b class='flag-5'>开发</b>培训讲师”认证

    动力子公司鸿多名讲师荣获首批“鸿蒙原生应用开发培训讲师”认证

    近日,由鸿蒙生态服务公司组织开展的国内首批“鸿蒙原生应用开发培训讲师”认证顺利完成。作为此次认证的重要参与者,鸿申报的四位鸿蒙资深专家
    的头像 发表于 03-25 09:24 440次阅读

    动力子公司鸿战略签约鄂尔多斯工业互联网平台

    多方力量,旨在通过构建创新交流平台,凝聚智慧力量,进一步巩固鄂尔多斯市工业互联网建设成果,充分发挥矿鸿产业优势,加快工业互联网基础设施建设。动力子公司鸿
    的头像 发表于 01-22 13:57 534次阅读