当前位置:   article > 正文

鸿蒙开发之C++如何获取ets的Array<string>_鸿蒙传输数组 c++

鸿蒙传输数组 c++
背景
  1. ets需要调用cronet的preconnect接口,接口里面我定义了number和array两个参数,基础类型napi都有相应解决办法,但是array数组如何获取一直没有明确的文档说明,我这里通过自己实验后说明下如何获取ets的array内容
ets与C++关系
  1. 每个C++鸿蒙项目,都有个oh-package.json5文件,里面配置了so对应的native层对应的ets接口。
  2. ets所有接口声明的函数参数,经过native转换后,最后参数都会变成napi_callback_info一个参数,我们需要通过napi_get_cb_info解析出每个参数内容。例如下面
//ets层
function preConnectStreams(num: number, urls: Array<string>): number;

//native c++接口
napi_value PreConnectStreams(napi_env env, napi_callback_info info) 

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  1. 如何配置ets和c++符号映射关系可以看官网介绍
C++层如何获取array
  1. 通过napi_get_cb_info获取到 napi_value数组内容后,我这里知道函数只能传递2个函数,所以声明大小是2,你可以根据自己函数参数个数进行说明。
size_t argc = 2;
napi_value args[2] = {nullptr};

napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);

  • 1
  • 2
  • 3
  • 4
  • 5
  1. 在获取napi_value 里面的内容后,现在就是需要将napi_value转成array可以让我们读取里面的值。首先要获取数组的长度,然后我们通过for循环可以通过napi_get_element读取数组里面的值。拿到的值也是napi_value 来的,我们需要通过其他napi转成具体类型,我下面是通过GetStringFromValueUtf8转成utf-8编码的字符串。
bool isArray;
    napi_is_array(env, args[1], &isArray);
    //做安全校验保护
    if (!isArray) {
        HILOGI("magic PreConnectStreams param is not array.");
        return;
    }
    uint32_t array_length;
    napi_get_array_length(env, args[1], &array_length);
    
    for (uint32_t index = 0; index < array_length; ++index) {
        napi_value name = nullptr;
        if (napi_get_element(env, args[1], index, &name) != napi_ok) {
            continue;
        }
        napi_valuetype valueType = napi_undefined;
        napi_typeof(env, value, &valueType)
        if (valueType != napi_string) {
            continue;
        }

        size_t stringszise = 0;
        napi_get_value_string_utf8(env, name, nullptr, 0 , &stringszise);
        std::string valueString;
        valueString.resize(stringszise+1);
        napi_get_value_string_utf8(env, name, &valueString[0], stringszise+1, &stringszise);
        PreConnectStreamsImpl(num, valueString);
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
总结
  1. 鸿蒙开发大部分和android类似的,只不过ets语法还不熟悉,边写边学可以更快上手
  2. 菜鸡还是要多努力学习总结

写在最后

鸿蒙战略胜利,目前鸿蒙开发是一个急需要人才的缺口,在未来几年势必会有大量的鸿蒙岗位出现,目前所存在的鸿蒙岗位也是给出了相当高的薪资。事实证明,鸿蒙开发确实是一块香饽饽。作为华为自家的操作系统,正在逐步扩张市场份额。想要转行或者入行的朋友可以下手了。在这里,为大家提供一份我整理的鸿蒙开发学习资料,涵盖了UI开发、web、应用模型多个知识点,有需要的朋友可以扫描下方二维码,免费获取更多相关资料。

一、鸿蒙进阶开发学习之UI开发

1、方舟开发框架(ArkUI)概述

2、基于ArkTS声明式开发范式

3、兼容JS的类Web开发范式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、鸿蒙开发进阶学习之web

1、设置基本属性和事件

2、在应用中使用前端页面JavaScript

3、并发

4、…

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三、鸿蒙开发进阶学习之应用模型

1、应用模型概述

2、Stage模型开发指导

3、FA模型开发指导

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、鸿蒙零基础入门学习指南

1、快速入门

2、开发基础知识

3、资源分类与访问

4、学习ArkTs语言

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/731017
推荐阅读
相关标签
  

闽ICP备14008679号