C++同步调ArkTS里面的方法

C++同步调用ArkTS里面的方法,以便将C++执行的一些信息返回ets中处理。

HarmonyOS
2024-05-23 21:43:00
浏览
收藏 0
回答 1
回答 1
按赞同
/
按时间
躺平嗑产品懒猫

使用的核心API

napi_get_cb_info
napi_get_value_double
napi_create_double
napi_call_function
  • 1.
  • 2.
  • 3.
  • 4.

核心代码解释

Native层回调JS层函数,lambda表达式方式:

import hilog from '@ohos.hilog'; 
import testNapi from 'libentry.so'; 
 
@Entry 
@Component 
struct Index { 
  @State message: string = 'Hello World'; 
  //private resmgr = getContext().resourceManager;  // 获取js的资源对象 
 
  build() { 
    Row() { 
      Column() { 
        Text(this.message) 
          .fontSize(50) 
          .fontWeight(FontWeight.Bold) 
          .onClick(() => { 
            hilog.info(0x0000, 'testTag', 'Test NAPI 2 + 3 = %{public}d', testNapi.add(2, 3)); 
            testNapi.addSync(3, 4, (result:number)=>{ 
              this.message = 'result is ' + result.toString(); 
            }); 
          }) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

C++层处理:

static napi_value AddSync(napi_env env, napi_callback_info info) { 
    size_t requireArgc = 3; 
    size_t argc = 3; 
    napi_value args[3] = {nullptr}; 
napi_value context = nullptr; 
 
napi_get_cb_info(env, info, &argc, args, &context, 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 callBackArg[1] = {nullptr}; 
napi_create_double(env, value0 + value1, &callBackArg[0]); 
 
napi_value sum; 
napi_call_function(env, context, args[2], 1, callBackArg, &sum); 
 
return sum; 
} 
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}, 
{"addSync", nullptr, AddSync, nullptr, nullptr, nullptr, napi_default, nullptr} 
}; 
napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); 
return exports; 
} 
EXTERN_C_END
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.

index.d.ts

export const addSync: (a: number, b: number, callback:(result:number)=>void) => number;
  • 1.

实现效果

手机运行:

点击后:

适配的版本信息

IDE:DevEco Studio 4.0.1.601

SDK:HarmoneyOS 4.0.10.11

分享
微博
QQ
微信
回复
2024-05-24 17:04:36


相关问题
HarmonyOS C++层如何同步调用JS函数 -
819浏览 • 0回复 待解决
C++调用ArkTS 定义的方法
3407浏览 • 1回复 待解决
HarmonyOS ArkTSC++ 偶现方法找不到。
1367浏览 • 1回复 待解决
HarmonyOS C++ArkTS交互
1008浏览 • 1回复 待解决
HarmonyOS ArkTSC/C++的交互
1784浏览 • 1回复 待解决
如何在C/C++ 创建ArkTS的对象
3464浏览 • 1回复 待解决
c/c++层主动调用ArkTS存在问题
1669浏览 • 1回复 待解决
C++ 如何获取操作 Arkts 实例
1746浏览 • 1回复 待解决
如何实现ArkTSC/C++的数组转换
1804浏览 • 1回复 待解决
ArkTS里面的?. 是什么意思
3158浏览 • 1回复 待解决
ArkTSC++互相直接调用
4176浏览 • 1回复 待解决
HarmonyOS ArkTsC++实时通信
1033浏览 • 1回复 待解决
ArkTSC++之间的交互
2531浏览 • 1回复 待解决
如何实现ArkTSC/C++的HashMap转换?
2174浏览 • 0回复 待解决
ArkTS/js怎样与C++进行交互?
1388浏览 • 1回复 待解决
提问
该提问已有2人参与 ,帮助了71人