当前位置:   article > 正文

鸿蒙c的调用demo,传送字符串等类型_harmonyos artts调用c方法

harmonyos artts调用c方法

写一传输字符串的demo,返回也是字符串

1.检查对应的sdk是否都安装好了,我用的是sdk9

2.新创建一个Native  c++项目,目录结构

cke_3226.png

3.鸿蒙是调用c的流程

cke_5605.png

案列简易Native C++ 示例(ArkTS) (huawei.com)

4.写一传输字符串的demo,返回也是字符串

去index.ets里面导入import testNapi from 'libentry.so',添加按钮

Button("点击")

          .onClick(() => {

            let outputcode = testNapi.getCode("stringdemo");

            console.info("测试:"+outputcode)

          })

然后去index.d.添加

export const getCode: (a: any) => any;

注意oh-package.json5文件里面对应的路径和名字不要写错

5.最后调用代码。去你的hello.cpp

static napi_module demoModule = {

    .nm_version =1,

    .nm_flags = 0,

    .nm_filename = nullptr,

    .nm_register_func = Init, //人口方法

    .nm_modname = "entry",//模块名

    .nm_priv = ((void*)0),

    .reserved = { 0 },

};

extern "C" __attribute__((constructor)) void RegisterEntryModule(void)

{

    napi_module_register(&demoModule);

}

EXTERN_C_START

static napi_value Init(napi_env env, napi_value exports)

{

    napi_property_descriptor desc[] = {

//getCode是对应的index.d.ts的方法名。GetCode是你要在.cpp里面实现的方法名

        { "getCode", nullptr, GetCode, nullptr, nullptr, nullptr, napi_default, nullptr }

    };

    napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);

    return exports;

}

EXTERN_C_END

 

static napi_value GetCode(napi_env env, napi_callback_info info) {

    //输入参数个数

    size_t argc = 1;

    //输入参数数组

    napi_value args[1] = {nullptr};

    //将获取的传入参数放入数组中

    if (napi_ok != napi_get_cb_info(env, info, &argc, args, nullptr, nullptr)) {

        return nullptr;

    }

//上面的你就能把输入的字符串放入args[0]中了,下面就是写对应的调用逻辑

//记录长度

    size_t typeLen = 0;

    //char类型的转换

    char *str = nullptr;

    //写入缓存,获得args[0]对应的char长度

    napi_get_value_string_utf8(env, args[0], nullptr, 0, &typeLen);

    //napi_get_value_string_utf8(env,数组对象,char,缓存长度,获取的长度)主要作用是通过缓存复制的方法,将对象转换为char,复制到缓存中,获取长度

    str = new char[typeLen + 1];

   //获取输入的字符串转换为char类型的str

    napi_get_value_string_utf8(env, args[0], str, typeLen + 1, &typeLen);

//然后你就可以写对应的加密之类的操作了,这个自己写,我跳过了

 

//创建输出对象

    napi_value output;

    //将char类型的str,赋值给output,类型为string

    napi_create_string_utf8(env, str, typeLen , &output);

    //返回的是长度

    //napi_create_double(env, typeLen, &output);

 return output;

//    return args[0];//这个是直接返回输入对象

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

闽ICP备14008679号