HarmonyOS libSysCapabilities目录下的函数如何在C++端调用

发现ohos下面有一个libSysCapabilities,里面有很多系统的方法函数,但不清楚该如何在c++端调用,比如想调用DeviceUtils下的getSystemLanguage,请问有具体demo案例吗?强烈建议给出一个简单的案例。

HarmonyOS
2024-09-09 12:03:09
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

libSysCapabilities是一个har包,如果想在entry下的c++端调用,需要涉及到native和ArkTs交互通信,以下以DeviceUtils下的getSystemLanguage的示例代码。

ArkTS侧

getSystemLanguage(): string { 
  return i18n.System.getSystemLanguage(); 
} 
Button("native调用ArkTS函数 带返回值") 
  .backgroundColor(Color.Green) 
  .fontColor(Color.White) 
  .margin(20) 
  .fontSize(15) 
  .borderRadius(10) 
  .width(150) 
  .height(30) 
  .onClick(() => { 
    nativeCallArkTSFunc(()=>{ 
      return this.getSystemLanguage() 
    }) 
  })

index.d.ts

export const nativeCallArkTSFunc: (obj: (() => string)) => void

cpp侧

#define LOGI(format, args) OH_LOG_Print(LOG_APP, LOG_INFO, 0, "logI", format, args); 
napi_value GetTsParams::CallArkTsFucn(napi_env env, napi_callback_info info){ 
  // 几个参数 
  size_t argc = 1; 
  // 获取参数数组 
  napi_value args[1] = {nullptr}; 
  // 获取传入的参数 
  napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); 
  // 创建arkTs入参 
  napi_value argv = nullptr; 
  // 传入回调函数 
  napi_value result = nullptr; 
  napi_call_function(env, nullptr, args[0], argc, &argv, &result); 
  //此处需要把napi_value转换成 string类型 
  char name[50]; 
  size_t sizeRes = 0; 
  napi_get_value_string_utf8(env, result, name, sizeof(name)+1, &sizeRes); 
  LOGI("CallArkTsFucn======%{public}s", name); 
  return result; 
}
分享
微博
QQ
微信
回复
2024-09-09 16:27:31
相关问题
ArkTS调用C++类中成员函数
1269浏览 • 1回复 待解决
HarmonyOS 如何调用标准C++
406浏览 • 1回复 待解决
如何C++ 提供回调函数
2429浏览 • 1回复 待解决
如何在C/C++ 创建ArkTS对象
2203浏览 • 1回复 待解决
HarmonyOS 项目使用c++库导出函数报错
220浏览 • 1回复 待解决
C++调用ArkTS 定义方法
1969浏览 • 1回复 待解决
c/c++层主动调用ArkTS存在问题
341浏览 • 1回复 待解决
aki是否支持C++函数和callback?
846浏览 • 1回复 待解决
鸿蒙如何读取resources目录下文件
3429浏览 • 1回复 待解决
如何动态访问media目录下资源
2064浏览 • 1回复 待解决
ArkTS与C++互相直接调用
2135浏览 • 1回复 待解决
如何获取工程目录下json文件?
840浏览 • 1回复 待解决
如何修改C++版本?C++支持情况?
1070浏览 • 1回复 待解决