OpenHarmony N-API 使用规则问题 精华

leohe 显示全部楼层 发表于 2023-12-27 14:05:54

背景

OpenHarmony3.2

需求描述

需要使用N-API导出C++的接口给ARKTS 使用. 在使用过程中, 参考C系接口的用法, 总感觉困难重重,各种别扭. 包括一些集中

  1. 返回指针或者对象给ARKTS层, 实现繁琐
  2. 调用N-API函数, 需要返回多个参数
  3. C++层需要主动调用ARTTS的接口, 缺乏env句柄
  4. ARKTS层传参数给C++层, 解析过程繁琐, 异常报错处理机制

主要问题

  1. 类实例指针, 结构体实例指针是否推荐从C++层返回给ARKTS层持有? 还是推荐在C++层做一个map映射层strid 返回给arkts层?
  2. N-API需要返回多个参数, 在arkts层应该如何解决解析问题? 是否需要转换成json, 还是直接使用napi_value包装类json数据?
  3. 当C++层独立线程里面有事件需要主动回调给arkts层, 而当前类又不持有env句柄, 应该如何回调?
  4. C++使用napi_get_cb_info解析入参时, 发现数据异常不合规, 是否应该抛异常? 还是直接返回nullptr
您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

精彩评论3

lpzhong

沙发 发表于 2023-12-28 08:25:24
问题1. 可以将类实例指针返回到arkTS层,上层应用可以直接通过指针访问类的成员函数等
问题2. 一般情况转成json数据解析比较方便一点
问题3. 一般这种情况是需要native层保留一个全局的env的
问题4. napi_get_cb_info 解析入参出错直接返回nullptr即可。

对于napi这块的使用,建议使用[aki](https://gitee.com/openharmony-sig/aki),使用aki以上问题用户基本上不需要关注的。

leohe

发表于 2023-12-29 08:26  IP属地: - 中国广东省广州市 中国电信IDC

回复 lpzhong: 问题3. 一般这种情况是需要native层保留一个全局的env的
> 关于这个方案, C++层具体应该保留哪个函数env指针作为一个全局的env?

native的多线程文档里面提到每个函数的env指针可能不同. 我的native层是一个独立的线程回调. 是否会面临跨线程访问env的问题?

lpzhong

发表于 2023-12-29 11:16  IP属地: 广东省广州市

回复 leohe: 会有这种风险,但没有其他办法的前提下暂时可用这种方法。

【2 条回复】

Copyright   ©2023  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

返回顶部