精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

    文章

    8526

    瀏覽量

    150861
  • C++
    C++
    +關注

    關注

    22

    文章

    2104

    瀏覽量

    73503
  • 開發板
    +關注

    關注

    25

    文章

    4959

    瀏覽量

    97214
  • OpenHarmony
    +關注

    關注

    25

    文章

    3665

    瀏覽量

    16161

原文標題:揚帆系列“競”OpenHarmony開發板實現對給定的兩個數進行加減乘除運算

文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發燒友開源社區】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    【軟通動力鴻湖萬聯揚帆系列“競”開發板試用體驗】Native C++應用Demo示例(eTS)

    OpenHarmony開發板測試Native C++應用
    的頭像 發表于 10-13 10:19 ?1041次閱讀
    【軟通動力鴻湖萬聯揚帆系列“競”<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 ?1735次閱讀
    鴻蒙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 ?2517次閱讀
    鴻蒙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 ?3627次閱讀

    OpenHarmony3.0編譯C控制Hi3516開發板的LED閃爍

    使用的是比較新的 OpenHarmony 3.0 LTS 版本,Linux 內核,編譯標準系統。 官方文檔已經說明了,如何使用 DevEco Studio 開發 hap 包,并運行在開發板,但是 ACE
    的頭像 發表于 09-28 09:42 ?3643次閱讀
    <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 ?2452次閱讀
    如何移植<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 ?2431次閱讀
    如何把<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 ?1827次閱讀
    怎么樣把<b class='flag-5'>OpenHarmony</b>燒錄到<b class='flag-5'>開發板</b><b class='flag-5'>上</b>

    OpenHarmony開發板適配經驗分享--王城

    OpenHarmony開發板適配經驗分享 審核編輯:金巧
    的頭像 發表于 12-28 14:46 ?1702次閱讀
    <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 ?1369次閱讀

    開發板如何適配OpenHarmony 3.2

    科技基于RK3568設計的HCPAD-100開發板以及基于RK3566設計的中控屏HongzPad2022在OpenHarmony 3.2 Beta5版本的適配過程。 涉及到開發板
    的頭像 發表于 04-04 01:35 ?1452次閱讀

    OpenHarmony C++公共基礎類庫應用案例:HelloWorld

    1、程序簡介該程序是基于OpenHarmonyC++公共基礎類庫的簡單案例:HelloWorld。該應用案例已在OpenHarmony凌蒙派-RK3568開發板(即
    的頭像 發表于 11-23 08:22 ?677次閱讀
    <b class='flag-5'>OpenHarmony</b> <b class='flag-5'>C++</b>公共基礎類庫應用案例:HelloWorld