在c++中实例化自定义类并调用方法

需要将复杂对象通过ArkTS传递到c++然后调用这个对象的方法。

HarmonyOS
2024-09-19 11:45:47
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa

使用napi_get_named_property获取ArkTS传递对象的方法,napi_call_function传入参数调用对应方法

参考代码:

native侧:

static napi_value GetMsg(napi_env env, napi_callback_info info) { 
  size_t argc = 1; 
  napi_value argv[1] = {nullptr}; 
  napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr); 
  ​ 
  napi_status status; 
  ​ 
  napi_value setFunc; 
  napi_get_named_property(env, argv[0], "setMsg", &setFunc); 
  ​ 
  napi_value code; 
  napi_create_uint32(env, 200, &code); 
  char strMsg[] = "OK"; 
  napi_value msg; 
  napi_create_string_utf8(env, strMsg, strlen(strMsg), &msg); 
  napi_value parameter[2]; 
  parameter[0] = code; 
  parameter[1] = msg; 
  status = napi_call_function(env, argv[0], setFunc, 2, parameter, nullptr); 
  napi_value logFunc; 
  napi_get_named_property(env, argv[0], "toLog", &logFunc); 
  status = napi_call_function(env, argv[0], logFunc, 0, nullptr, nullptr); 
  ​ 
  return nullptr; 
}

ArkTS侧:

export class MsgResult { 
  code: number = 0; 
  msg: string = ""; 
  ​ 
  setMsg(code: number, msg: string) { 
    this.code = code; 
    this.msg = msg; 
  } 
  ​ 
  toLog() { 
    console.log(this.code + ":" + this.msg) 
  } 
} 
​ 
import testNapi from 'libentry.so'; 
import { MsgResult } from './MsgResult'; 
let r = new MsgResult() 
testNapi.getMsg(r);
分享
微博
QQ
微信
回复
2024-09-19 16:20:18
相关问题
C++调用ArkTS 定义方法
2038浏览 • 1回复 待解决
ArkTS调用C++的成员函数
1311浏览 • 1回复 待解决
HarmonyOS C++自定义组件如何开发?
322浏览 • 1回复 待解决
HarmonyOS 自定义方法链式调用
168浏览 • 1回复 待解决
自定义如何实现序列
1988浏览 • 1回复 待解决
getContext(this)能否自定义中使用
2299浏览 • 1回复 待解决
C++ 如何获取操作 Arkts 实例
933浏览 • 1回复 待解决