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

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

阅读 464
1 个回答

问题场景:

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

参考答复:

使用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);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
HarmonyOS
子站问答
访问
宣传栏