赞
踩
写一传输字符串的demo,返回也是字符串
1.检查对应的sdk是否都安装好了,我用的是sdk9
2.新创建一个Native c++项目,目录结构
3.鸿蒙是调用c的流程
案列简易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];//这个是直接返回输入对象
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。