在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于OpenHarmony開發(fā)板上測試Native C++應(yīng)用開發(fā)

電子發(fā)燒友開源社區(qū) ? 來源:電子發(fā)燒友開源社區(qū) ? 作者:電子發(fā)燒友開源社 ? 2022-10-08 14:37 ? 次閱讀

本文主要分享在軟通動(dòng)力揚(yáng)帆系列“競”OpenHarmony開發(fā)板上測試Native C++應(yīng)用開發(fā),實(shí)現(xiàn)eTS調(diào)用Native C++ 程序?qū)崿F(xiàn)對給定的兩個(gè)數(shù)進(jìn)行加減乘除運(yùn)算示例(eTS)

1.新建OpenHarmony Native C++工程

選擇File->New->Create Project -> OpenHarmony -> Native C++點(diǎn)擊Next

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

輸入Project name,選擇SDK版本9

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

點(diǎn)擊Finish,如果Native SDK 沒有下載則會(huì)出現(xiàn)以下界面,點(diǎn)擊Configure Now

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

下載Native SDK

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

Native SDK下載完成后點(diǎn)擊Finish 進(jìn)入工程

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

2.源碼修改

2.1 工程主要文件說明

工程初始化后目錄結(jié)構(gòu)如下圖,主要文件為紅色框內(nèi)文件

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

主要文件文件說明如下:

├── cpp:C++代碼區(qū)         
│  ├── types:                     // 接口存放文件夾
│  │  └── libentry       
│  │    ├── index.d.ts               // 接口文件
│  │    └── package.json              // 接口注冊配置文件
│  ├── CmakeList.txt                  // Cmake打包配置文件
│  └── hello.cpp                    // C++源代碼
└── ets                         // ets代碼區(qū)
  └── Application
  │  └── AbilityStage.ts               // Hap包運(yùn)行時(shí)類
  ├── MainAbility
  │  └── MainAbility.ts               // Ability,提供對Ability生命周期、上下文環(huán)境等調(diào)用管理
  └── pages
    └── index.ets                  // 主頁面

(左右移動(dòng)查看全部內(nèi)容)

2.2 cpp源碼編寫

自帶的案例已經(jīng)實(shí)現(xiàn)了加法運(yùn)算的接口,本案例在此基礎(chǔ)上加入減法乘法除法,entrysrcmaincpphello.cpp主要修改如下

參考“Add”方法,實(shí)現(xiàn)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;


}

(左右移動(dòng)查看全部內(nèi)容)

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

(左右移動(dòng)查看全部內(nèi)容)

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;

(左右移動(dòng)查看全部內(nèi)容)

2.4 界面實(shí)現(xiàn)

src/main/ets/pages/index.ets中通過import testNapi from 'libentry.so'引入SO包,當(dāng)點(diǎn)擊按鈕時(shí)調(diào)用對應(yīng)的方法

import testNapi from 'libentry.so'


@Entry
@Component
struct Index {
 private textInputController1: TextInputController = new TextInputController()
 private textInputController2: TextInputController = new TextInputController()
 private tittle: string = '調(diào)用C標(biāo)準(zhǔn)庫示例'
 private message: string = '對給定的兩個(gè)數(shù)進(jìn)行加減乘除運(yùn)算'
 private tipsNum1: string = '請輸入第一個(gè)數(shù):'
 private tipsNum2: string = '請輸入第二個(gè)數(shù):'
 private tipsResult: string = '結(jié)果:'
 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: '請輸入第一個(gè)數(shù)字:', 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: '請輸入第二個(gè)數(shù)字:', 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%')
 }
}

(左右移動(dòng)查看全部內(nèi)容)

3.運(yùn)行效果演示

簽名后運(yùn)行效果如下:

加法:

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

減法:

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

乘法:

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

除法:

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

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8596

    瀏覽量

    151147
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2108

    瀏覽量

    73646
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5050

    瀏覽量

    97456
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3722

    瀏覽量

    16313

原文標(biāo)題:揚(yáng)帆系列“競”O(jiān)penHarmony開發(fā)板實(shí)現(xiàn)對給定的兩個(gè)數(shù)進(jìn)行加減乘除運(yùn)算

文章出處:【微信號:HarmonyOS_Community,微信公眾號:電子發(fā)燒友開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    【軟通動(dòng)力鴻湖萬聯(lián)揚(yáng)帆系列“競”開發(fā)板試用體驗(yàn)】Native C++應(yīng)用Demo示例(eTS)

    OpenHarmony開發(fā)板測試Native C++應(yīng)用
    的頭像 發(fā)表于 10-13 10:19 ?1073次閱讀
    【軟通動(dòng)力鴻湖萬聯(lián)揚(yáng)帆系列“競”<b class='flag-5'>開發(fā)板</b>試用體驗(yàn)】<b class='flag-5'>Native</b> <b class='flag-5'>C++</b>應(yīng)用Demo示例(eTS)

    鴻蒙next開發(fā)-OpenHarmony的NDK開發(fā)

    Native API是OpenHarmony SDK提供的一組native開發(fā)接口與工具集合(也稱為NDK),方便
    的頭像 發(fā)表于 01-20 11:35 ?1801次閱讀
    鴻蒙next<b class='flag-5'>開發(fā)</b>-<b class='flag-5'>OpenHarmony</b>的NDK<b class='flag-5'>開發(fā)</b>

    鴻蒙OS開發(fā)實(shí)例:【Native C++

    使用DevEco Studio創(chuàng)建一個(gè)Native C++應(yīng)用。應(yīng)用采用Native C++模板,實(shí)現(xiàn)使用NAPI調(diào)用C標(biāo)準(zhǔn)庫的功能。使用
    的頭像 發(fā)表于 04-14 11:43 ?2629次閱讀
    鴻蒙OS<b class='flag-5'>開發(fā)</b>實(shí)例:【<b class='flag-5'>Native</b> <b class='flag-5'>C++</b>】

    【軟通動(dòng)力鴻湖萬聯(lián)揚(yáng)帆系列“競”開發(fā)板試用體驗(yàn)】試用測評報(bào)告五 –開源鴻蒙C/C++軟件開發(fā)

    鴻湖萬聯(lián)揚(yáng)帆系列“競”開發(fā)板試用測評報(bào)告五 –開源鴻蒙C/C++軟件開發(fā)大信(QQ:8125036)在成功的建立了開源鴻蒙的集成開發(fā)環(huán)境以后
    發(fā)表于 09-22 17:29

    【軟通動(dòng)力鴻湖萬聯(lián)揚(yáng)帆系列“競”開發(fā)板試用體驗(yàn)】Native C++應(yīng)用Demo示例(eTS)

    本文主要分享在軟通動(dòng)力揚(yáng)帆系列“競”OpenHarmony開發(fā)板測試Native C++應(yīng)用
    發(fā)表于 10-06 00:12

    如何使用DevEco Studio創(chuàng)建Native C++應(yīng)用

    展示點(diǎn)擊輸入框輸入兩個(gè)數(shù),再點(diǎn)擊計(jì)算按鈕調(diào)用接口,將數(shù)據(jù)傳入到C++端,C++端計(jì)算后再作為返回值到ArkTS端。環(huán)境搭建我們首先要完成應(yīng)用開發(fā)環(huán)境的搭建,本示例運(yùn)行RK3568開發(fā)板
    發(fā)表于 02-22 14:24

    openharmony開發(fā)openharmony開發(fā)板

    現(xiàn)在市面上支持OpenHarmony開發(fā)板已經(jīng)非常多了,OpenHarmony不僅僅只能在海思系列芯片運(yùn)行,比較常見的有HiSpark、小熊派系列。這些
    的頭像 發(fā)表于 06-24 09:03 ?3677次閱讀

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

    使用的是比較新的 OpenHarmony 3.0 LTS 版本,Linux 內(nèi)核,編譯標(biāo)準(zhǔn)系統(tǒng)。 官方文檔已經(jīng)說明了,如何使用 DevEco Studio 開發(fā) hap 包,并運(yùn)行在開發(fā)板,但是 ACE
    的頭像 發(fā)表于 09-28 09:42 ?3694次閱讀
    <b class='flag-5'>OpenHarmony</b>3.0<b class='flag-5'>上</b>編譯<b class='flag-5'>C</b>控制Hi3516<b class='flag-5'>開發(fā)板</b>的LED閃爍

    如何移植OpenHarmony 3.0 到星空派開發(fā)板

    9 月 30 日,OpenHarmony 3.0 LTS 版本發(fā)布。本文將介紹如何移植 OpenHarmony 3.0 到星空派開發(fā)板。 星空派
    的頭像 發(fā)表于 10-19 09:08 ?2496次閱讀
    如何移植<b class='flag-5'>OpenHarmony</b> 3.0 到星空派<b class='flag-5'>開發(fā)板</b><b class='flag-5'>上</b>

    如何把OpenHarmony燒錄進(jìn)博流BL-HWC-G1開發(fā)板

    作者:HonestQiao|喬楚 在上一篇【博流 BL-HWC-G1 開發(fā)板試用】開箱及編譯燒錄官方程序(BL602 IoT SDK)中,我們講了這塊開發(fā)板使用官方SDK進(jìn)行編譯燒錄,這一篇,我們
    的頭像 發(fā)表于 11-08 09:59 ?2503次閱讀
    如何把<b class='flag-5'>OpenHarmony</b>燒錄進(jìn)博流BL-HWC-G1<b class='flag-5'>開發(fā)板</b><b class='flag-5'>上</b>

    怎么樣把OpenHarmony燒錄到開發(fā)板

    ? 在上一篇【博流 BL-HWC-G1 開發(fā)板試用】開箱及編譯燒錄官方程序(BL602 IoT SDK)中,我們講了這塊開發(fā)板使用官方SDK進(jìn)行編譯燒錄,這一篇,我們來講OpenHarmony的編譯
    的頭像 發(fā)表于 11-10 09:17 ?1857次閱讀
    怎么樣把<b class='flag-5'>OpenHarmony</b>燒錄到<b class='flag-5'>開發(fā)板</b><b class='flag-5'>上</b>

    OpenHarmony開發(fā)板適配經(jīng)驗(yàn)分享--王城

    OpenHarmony開發(fā)板適配經(jīng)驗(yàn)分享 審核編輯:金巧
    的頭像 發(fā)表于 12-28 14:46 ?1728次閱讀
    <b class='flag-5'>OpenHarmony</b><b class='flag-5'>開發(fā)板</b>適配經(jīng)驗(yàn)分享--王城

    如何使用DevEco Studio創(chuàng)建Native C++應(yīng)用

    for OpenAtom OpenHarmony (以下簡稱“OpenHarmony”)創(chuàng)建一個(gè)Native C++應(yīng)用。應(yīng)用采用“Native
    的頭像 發(fā)表于 02-21 14:30 ?1424次閱讀

    開發(fā)板如何適配OpenHarmony 3.2

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

    OpenHarmony C++公共基礎(chǔ)類庫應(yīng)用案例:HelloWorld

    1、程序簡介該程序是基于OpenHarmonyC++公共基礎(chǔ)類庫的簡單案例:HelloWorld。該應(yīng)用案例已在OpenHarmony凌蒙派-RK3568開發(fā)板(即
    的頭像 發(fā)表于 11-23 08:22 ?703次閱讀
    <b class='flag-5'>OpenHarmony</b> <b class='flag-5'>C++</b>公共基礎(chǔ)類庫應(yīng)用案例:HelloWorld
    主站蜘蛛池模板: 在线免费看高清视频大全| 天堂网在线.www天堂在线| 屁屁影院在线| 激情开心婷婷| 天天爽夜夜爽夜夜爽精品视频| 欧美30p| 特级毛片免费视频播放| 韩国黄色三级视频| 久久天天躁狠狠躁夜夜躁| 乱肉情欲杂乱小说| 亚洲 欧美 日韩 在线 中文字幕| 久久狠狠色噜噜狠狠狠狠97| 免费看美女午夜大片| 在线亚洲欧美性天天影院| 狠狠丁香激情久久综合| 高清一级片| 精品国产污污免费网站入口| 美女黄视频免费| 一级特黄aaa大片在| 俄罗斯美女69xxxxxx| 四虎hu| 午夜高清在线观看免费6| 日本不卡视频一区二区三区| 久久性妇女精品免费| 国产精品午夜高清在线观看| 午夜剧场黄色| 久久精品2020| 67194最新网址| 色批网站www| 手机看片久久| 亚洲精品卡1卡二卡3卡四卡 | 黄频网| 欧美日韩性猛交xxxxx免费看| 看片在线观看免费| 性欧美video视频另类| 又黄又爽又猛午夜性色播在线播放| 一区二区三区四区在线| 精品一区二区视频| 国内啪啪| 精品一区 二区三区免费毛片| 88av视频在线|