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

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

HarmonyOS
2024-05-23 21:43:00
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
p3586

使用的核心API

napi_get_cb_info
napi_get_value_double
napi_create_double
napi_call_function

核心代码解释

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%') 
  } 
}

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

index.d.ts

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

实现效果

手机运行:

点击后:

适配的版本信息

IDE:DevEco Studio 4.0.1.601

SDK:HarmoneyOS 4.0.10.11

分享
微博
QQ
微信
回复
2024-05-24 17:04:36
相关问题
C++调用ArkTS 定义的方法
483浏览 • 1回复 待解决
如何在C/C++ 创建ArkTS的对象
713浏览 • 1回复 待解决
ArkTS里面的?. 是什么意思
740浏览 • 1回复 待解决
C++ 如何获取操作 Arkts 实例
389浏览 • 1回复 待解决
ArkTSC++之间的交互
393浏览 • 1回复 待解决
ArkTSC++互相直接调用
461浏览 • 1回复 待解决
如何实现ArkTSC/C++的HashMap转换?
361浏览 • 0回复 待解决
ArkTS对象绑定的C++对象如何回收?
353浏览 • 1回复 待解决
ArkTS调用C++类中的成员函数
476浏览 • 1回复 待解决
ArkTs中异步方法如何转变成同步方法
549浏览 • 0回复 待解决
C++中的native方法能否直接导出
657浏览 • 1回复 待解决
如何修改C++版本?C++支持情况?
309浏览 • 1回复 待解决
c++侧可以直接调用ts的static方法吗?
593浏览 • 1回复 待解决
HAR中C++编写的so的native方法的使用
287浏览 • 1回复 待解决
提问
该提问已有0人参与 ,帮助了0人