<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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

    文章

    7765

    瀏覽量

    148764
  • C++
    C++
    +關注

    關注

    21

    文章

    2066

    瀏覽量

    72946
  • 開發板
    +關注

    關注

    25

    文章

    4524

    瀏覽量

    94552
  • OpenHarmony
    +關注

    關注

    24

    文章

    3394

    瀏覽量

    15209

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

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

收藏 人收藏

    評論

    相關推薦

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

    “競”OpenHarmony開發板測試Native C++應用開發,實現eTS調用
    的頭像 發表于 10-13 10:19 ?867次閱讀
    【軟通動力鴻湖萬聯揚帆系列“競”<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),方便開發者使用C或者
    的頭像 發表于 01-20 11:35 ?1200次閱讀
    鴻蒙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標準庫的功能。使用C標準庫hypot接口計算兩個給定數平方和的平
    的頭像 發表于 04-14 11:43 ?849次閱讀
    鴻蒙OS<b class='flag-5'>開發</b>實例:【<b class='flag-5'>Native</b> <b class='flag-5'>C++</b>】

    HarmonyOS與OpenHarmony應用開發差異

    行安裝?!?b class='flag-5'>OpenHarmony只支持使用JS語言開發應用,不支持Java、C/C++語言。OpenHarmony
    發表于 10-22 10:35

    如何編譯已有的C++去生成可在OpenHarmony系統使用的動態庫文件呢

    原有Linux環境下的C++ 項目,可通過在CMakeList文件中設置使用的工具鏈,編譯出各平臺開發板可使用的so文件。請問,我現在在Hi3516開發板
    發表于 03-16 10:42

    OpenHarmony應用開發為什么不首選C/C++作為應用開發語言呢

    OpenHarmony本來就是CC++開發的,支持C/C++語言環境。應用
    發表于 03-17 10:30

    OpenHarmony為什么不首選C/C++作為應用開發語言?

    OpenHarmony本來就是CC++開發的,支持C/C++語言環境。應用
    發表于 06-01 11:30

    求助,請問支持OpenHarmony系統的開發板使用的工具鏈是否一樣?

      目前在裝有OpenHarmony系統的Hi3516DV300的開發板,使用clang的工具鏈編譯項目,可以在正常運行在開發板。想問下
    發表于 06-06 16:36

    【軟通動力鴻湖萬聯揚帆系列“競”開發板試用體驗】試用測評報告五 –開源鴻蒙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

    迅為RK3568開發板 OpenHarmony v3.2-Beta4 版本測試

    迅為RK3568開發板 OpenHarmony v3.2-Beta4 版本測試在上個章節,我們在 RK3568 開發板燒寫了
    發表于 03-29 15:09

    openharmony開發openharmony開發板

    現在市面上支持OpenHarmony開發板已經非常多了,OpenHarmony不僅僅只能在海思系列芯片上運行,比較常見的有HiSpark、小熊派系列。這些開發板都是基于海思的Hi38
    的頭像 發表于 06-24 09:03 ?3314次閱讀

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

    OpenHarmony開發板適配經驗分享 審核編輯:金巧
    的頭像 發表于 12-28 14:46 ?1507次閱讀
    <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 ?909次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>