#夏日挑战赛# OpenHarmony NAPI之eTS 与C+ 原创 精华
yukoyu
发布于 2022-7-20 12:19
浏览
3收藏
本文正在参加星光计划3.0–夏日挑战赛
当前的DevEco Studio版本支持C++混合开发模式,本文使用DevEco Studio对NAPI的开发流程进行讲解。
1.新建工程
2.项目
我们可以看到,新建工程后,NAPI示例的框架,已经生成
3.应用签名
4.安装运行
可以看到,应用可以正常的运行
5.新建一个NAPI用例
①.新建一个test.cpp 文件
代码:
#include "napi/native_api.h"
static napi_value Add(napi_env env, napi_callback_info info) //加法
{
size_t requireArgc = 2;
size_t argc = 2; //参数个数
napi_value args[2] = {nullptr};
napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);
napi_valuetype valuetype0;
napi_typeof(env, args[0], &valuetype0);
napi_valuetype valuetype1;
napi_typeof(env, args[1], &valuetype1);
double value0;
napi_get_value_double(env, args[0], &value0); //得到数据
double value1;
napi_get_value_double(env, args[1], &value1);//得到数据
napi_value sum;
napi_create_double(env, value0 + value1, &sum);
return sum;
}
static napi_value Sub(napi_env env, napi_callback_info info)//减法
{
size_t requireArgc = 2;
size_t argc = 2;
napi_value args[2] = {nullptr};
napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);
napi_valuetype valuetype0;
napi_typeof(env, args[0], &valuetype0);
napi_valuetype valuetype1;
napi_typeof(env, args[1], &valuetype1);
double value0;
napi_get_value_double(env, args[0], &value0);
double value1;
napi_get_value_double(env, args[1], &value1);
napi_value sum;
napi_create_double(env, value0 - value1, &sum);
return sum;
}
static napi_value Mul(napi_env env, napi_callback_info info)//乘法
{
size_t requireArgc = 2;
size_t argc = 2;
napi_value args[2] = {nullptr};
napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);
napi_valuetype valuetype0;
napi_typeof(env, args[0], &valuetype0);
napi_valuetype valuetype1;
napi_typeof(env, args[1], &valuetype1);
double value0;
napi_get_value_double(env, args[0], &value0);
double value1;
napi_get_value_double(env, args[1], &value1);
napi_value sum;
napi_create_double(env, value0 * value1, &sum);
return sum;
}
static napi_value Div(napi_env env, napi_callback_info info)//除法
{
size_t requireArgc = 2;
size_t argc = 2;
napi_value args[2] = {nullptr};
napi_get_cb_info(env, info, &argc, args , nullptr, nullptr);
napi_valuetype valuetype0;
napi_typeof(env, args[0], &valuetype0);
napi_valuetype valuetype1;
napi_typeof(env, args[1], &valuetype1);
double value0;
napi_get_value_double(env, args[0], &value0);
double value1;
napi_get_value_double(env, args[1], &value1);
napi_value sum;
napi_create_double(env, value0 / value1, &sum);
return sum;
}
EXTERN_C_START
static napi_value Init(napi_env env, napi_value exports)
{
napi_property_descriptor desc[] = {
{ "add", nullptr, Add, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "sub", nullptr, Sub, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "mul", nullptr, Mul, nullptr, nullptr, nullptr, napi_default, nullptr },
{ "div", nullptr, Div, nullptr, nullptr, nullptr, napi_default, nullptr }
};
napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
return exports;
}
EXTERN_C_END
static napi_module demoModule = {
.nm_version =1,
.nm_flags = 0,
.nm_filename = nullptr,
.nm_register_func = Init,
.nm_modname = "libtest",
.nm_priv = ((void*)0),
.reserved = { 0 },
};
extern "C" __attribute__((constructor)) void RegisterModule(void)
{
napi_module_register(&demoModule);
}
②.新建一个命名为libtest的文件夹
在文件夹里面新建index.d.ts文件
代码:
export const add: (a: number, b: number) => number;
export const sub: (a: number, b: number) => number;
export const mul: (a: number, b: number) => number;
export const div: (a: number, b: number) => number;
在文件夹里面新建package.json文件
代码:
{
"name": "libtest.so",
"types": "./index.d.ts"
}
③.编辑CMakeLists.txt文件
加入这两行代码:
add_library(test SHARED test.cpp)
target_link_libraries(test PUBLIC libace_napi.z.so libc++.a)
6.编写eTS测试用例
①.导入头文件
import testNapi from "libtest.so"
②.编写NAPI测试代码
@Entry
@Component
struct Index {
@State message: string = 'NAPItest'
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
.onClick(() => {
this.message="Test NAPI 2 + 3 = " + testNapi.add(2, 3)+
"\n Test NAPI 2 - 3 = " + testNapi.sub(2, 3)+
"\n Test NAPI 2 * 3 = " + testNapi.mul(2, 3)+
"\n Test NAPI 2 / 3 = " + testNapi.div(2, 3)
console.log("Test NAPI 2 + 3 = " + testNapi.add(2, 3)+
"\n Test NAPI 2 - 3 = " + testNapi.sub(2, 3)+
"\n Test NAPI 2 * 3 = " + testNapi.mul(2, 3)+
"\n Test NAPI 2 / 3 = " + testNapi.div(2, 3));
})
}
.width('100%')
}
.height('100%')
}
}
7.安装测试
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2022-11-17 14:42:34修改
赞
7
收藏 3
回复
相关推荐
写的不错!
nice