首页
学习
活动
专区
圈层
工具
发布

零基础开发 Node.js Addons 插件:实现一个跨平台 sleep 函数

,那么在编译时也要根据平台选择编译。...有两点需要注意 #include "sleep.h" 这个宏定义是我们自己实现的,代码中 os_usleep() 这个函数是在这个文件中定义的,继续往下看。...= napi_number) { napi_throw_type_error(env, NULL, "microseconds must be a number"); return NULL...init); sleep.h NAPI_STATUS_CALL 这个和之前一样忽略掉,这里重点就是对函数 os_usleep() 的声明,通常在 C/C++ 程序中建议把所有的常量、宏、函数原型写在头文件中...,例如我们使用 node-gyp 工具在 Linux 系统要安装 Python、GCC,Windows 系统同样也要安装相应的构建环境,对于用户来说是一个极大的障碍,总不能要求用户同样也安装这些工具。

2.6K30

三方库移植之NAPI开发CC++与JS的数据类型转

return sum;}// napi_addon_register_func//2.指定模块注册对外接口的处理函数,具体扩展的接口在该函数中声明static napi_value registerFunc...desc[0]), desc); return exports; }// 1.先定义napi_module,指定当前NAPI模块对应的模块名//以及模块注册对外接口的处理函数,具体扩展的接口在该函数中声明...//2.指定模块注册对外接口的处理函数,具体扩展的接口在该函数中声明static napi_value registerFunc(napi_env env, napi_value exports){...exports; }// 1.先定义napi_module,指定当前NAPI模块对应的模块名//以及模块注册对外接口的处理函数,具体扩展的接口在该函数中声明// nm_modname: 模块名称,...Javascript值类型,被NAPI框架封装成统一的唯一类型——napi_value类型,为了能够进行计算,我们需要获取其对应在C/C++中的类型的值。

34620
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    零基础开发 Node.js Addons 插件:参数与返回值处理

    本篇介绍使用 Node-API 为 Node.js 开发基于 C 的 Addons 时,如何接收与处理 Node.js 层传递的参数、Node-API 参数类型如何与 C 的类型互转、使用 CMake.js...方法获取 napi_callback_info 上下文信息,这一块是 Node.js 层调用函数时传入的参数信息,以下是 napi_get_cb_info 方法的定义: napi_status napi_get_cb_info...我们要表示一个整型会用到 Number 类型,那么如果传递到 C 函数中,可以使用 Node-API 提供的函数 napi_get_value_int32() 函数转换为 C 语言中的 int 类型。...模块注册在第一篇中已经讲解过了,与之类似,我们本次注册模块名称为 calculator。...,CMake.js 是基于 CMake 的构建系统,它不需要你必须安装 Python 环境。

    1.7K20

    napi系列学习基础篇——如何通过DevEco Studio开发一个NAPI工程

    源码实现新建完工程后,实现napi接口的hello.cpp源码在工程的entry/src/main/cpp目录下。...注册napi模块先定义一个模块,对应结构体为napi_module,指定当前NAPI模块对应的模块名以及模块注册对外接口的处理函数,具体扩展的接口在该函数中声明,后面说明。...(&demoModule);}接口定义napi_property_descriptor结构体中声明了napi中对应的接口,如下所示,其中Add对应的使Native C++的接口,其应用端的接口对应为add...();而工程创建后,在index.ets文件(在工程的entry/src/main/ets/pages目录下)中系统已经默认生成了一个hello world的文本区域,且通过点击文本区域,可以调用getHelloString...工具上运行按钮进行安装运行应用了 调试应用安装运行后,在板子上我们可以在屏幕的中央看到Hello World的显示,并且我们点击Hello World后可以在DevEco Studio工具的Log窗口查看到对应的调试信息

    1.1K21

    OpenHarmony 串口服务访问

    项目介绍本文档是在eTS项目hap包中实现串口访问的使用说明,通过JS接口开放给上层应用使用。一、开发环境准备安装OpenHarmony SDK1....OpenHarmony SDK选项中选择配备API版本进行安装二、创建eTS项目创建支持Native C++的eTS项目三、NAPI库相关生成串口NAPI库1....根据serialhelper.d.ts文件生成对应的c++源码方式一:手动编写src/main/cpp/serial_helper.cppstruct AsyncCallInfo{ napi_env...复制到entry/libs/armeabi-a7v目录将库的头文件复制到entry/src/main/cpp/include目录继承SerialCallbackBase类,实现串口数据异步回调SerialAsyncCallback...) 在napi函数中调用api函数,使用NAPI框架生成工具生成OpenSerial代码,如下: struct OpenSerial_value_struct { std::string

    50421

    三方库移植之NAPI开发(3)通过IDE开发NAPI工程

    在本篇文章中,笔者使用三方库移植之NAPI开发1—Hello OpenHarmony NAPI中一样的hellonapi.cpp和index.ets源码,通过IDE开发一个RAM包的NAPI工程(集成C...++的动态库到开发板的RAM中),直接编译安装hap包到开发板即可。...(), &result); return result;}// napi_addon_register_func//2.指定模块注册对外接口的处理函数,具体扩展的接口在该函数中声明static napi_value...); return exports;}// 1.先定义napi_module,指定当前NAPI模块对应的模块名//以及模块注册对外接口的处理函数,具体扩展的接口在该函数中声明// nm_modname...d.ts声明文件的编写不同开发ROM包的NAPI工程时,笔者编写的@ohos.hellonapi.d.ts内容为开发RAM包的NAPI工程时,笔者编写的@ohos.hellonapi.d.ts内容为:编写

    38420

    三方库移植之NAPI开发—Hello OpenHarmony NAPI

    (), &result)); return result;}// 注册对外接口的处理函数napi_addon_register_func// 2.指定NAPI模块注册对外接口的处理函数,具体扩展的接口在该函数中声明...注册NAPI模块、添加接口声明定义的hellonapi模块,其对应结构体为napi_module。指定当前NAPI模块对应的模块名模块注册对外接口的处理函数,具体扩展的接口在该函数中声明。...= { // 声明该napi_module对外具体的提供的API为getHelloString // 在napi_property_descriptor desc[]中需要将编写...); return exports;}// 注册NAPI模块// 1.先定义NAPI模块,指定当前NAPI模块对应的模块名// 以及模块注册对外接口的处理函数,具体扩展的接口在该函数中声明// nm_modname...", #根据增量编译阶段报错添加的头文件目录 "//third_party/node/src" ] #根据增量编译时clang编译器报警,添加的

    1.1K20

    OpenHarmony如何正确利用native的方式实现跨线程调用?

    此外,还可以选择性地提供一个napi_finalize回调,用于在销毁线程安全函数时执行资源清理操作。...调用会被排队,并最终在JavaScript主线程上执行。资源清理: 当线程安全函数不再需要时,应当正确地释放和清理与其关联的资源。...通常开发者会将自定义数据赋值给req->data成员变量以在回调中使用。 work_cb: 执行实际工作的回调函数,一些耗时的操作可以在此执行,该函数在线程池的一个线程上运行。...需要注意的是,尽管uv_queue_work方法本身不直接涉及NAPI(Node-API)接口,但当涉及到与JavaScript线程交互时,特别是从native层向JavaScript层传递数据并触发回调时...// src/main/cpp/hello.cpp // 在子线程中调用线程安全函数 for (int i = 0; i < g_threadNum; i++) { //

    80720

    三方库移植之NAPI开发异步调用:Callback&Promise

    ,避免了层层嵌套的回调函数,保证了回调是以异步的方式进行调用的;用户在调用这些接口的时候,接口实现将异步执行任务,同时返回一个 Promise 对象,其代表异步操作的结果;在返回的结果的个数超过一个时,...sizeof(desc[0]), desc)); return exports;}// 定义napi_module,指定当前NAPI模块对应的模块名//以及模块注册对外接口的处理函数,具体扩展的接口在该函数中声明...//2.指定模块注册对外接口的处理函数,具体扩展的接口在该函数中声明static napi_value registerFunc(napi_env env, napi_value exports){...(desc[0]), desc); return exports; }// 1.先定义napi_module,指定当前NAPI模块对应的模块名//以及模块注册对外接口的处理函数,具体扩展的接口在该函数中声明...//以及模块注册对外接口的处理函数,具体扩展的接口在该函数中声明// nm_modname: 模块名称,对应eTS代码为import nm_modname from '@ohos.ohos_shared_library_name

    78620

    北向应用集成三方库——NAPI 导出类对象

    js结构体时实际的构建函数 static void Destructor(napi_env env, void *nativeObject, void *finalize); // 释放资源的函数...= napi_ok) { return nullptr; } mConstructor 定义js类时返回的代表类的构造函数的数据 sConstructor_ 生命周期变量 将类导出到...注意:以上实现都是在类的Init方法中,我们只需要在NAPI注册的接口中调用该Init即可。...应用调用NAPI实例导出接口在使用该NAPI的时候,我们需要在ts文件(路径在\entry\src\main\cpp\types\libentry\index.d.ts),声明以下内容:export const...接口中导出的方法和类应用调用新建一个helloworld的ETS工程,该工程中包含一个按键,我们可以通过该按键进行数据的在native c中存储和获取导出napi对应的库(之前NAPI接口生成的库名为libentry.so

    41220

    Flutter 与开源鸿蒙(OpenHarmony)扩展开发指南:自定义插件、系统能力封装与生态工具链建设

    ) 操作 分布式文件系统 调用 AI 推理引擎(如 MindSpore Lite) 在 OpenHarmony 中,这些能力无法通过标准 Android/iOS 插件复用,必须 重新封装为 OpenHarmony...double y, double z) { napi_env env = ...; // 获取当前 env napi_value jsData; napi_create_object(env..., z)); // 调用 Dart 注册的 EventCallback napi_value undefined; napi_get_undefined(env, &undefined);...七、调试技巧:Native + Dart 联合调试 场景:插件崩溃,日志不清晰 解决方案: 在 C++ 中添加 HiLog 输出: #include "hilog/log.h" OH_LOG_Print...(LOG_APP, LOG_INFO, LOG_DOMAIN, "SensorPlugin", "Start accelerometer"); 在 DevEco Studio 中开启 Native Debug

    27710

    纯血鸿蒙APP实战开发——NAPI封装ArkTS接口案例

    的回调中调用addUIContext方法必须在UIAbility的onWindowStageCreate中的windowStage.loadContent之后调用setTopAbilityID建议在UIAbility...的onWindowStageDestroy中调用removeUIContext方法实现思路native侧需要主动调用ets侧的代码,需要将ets侧代码注入到native侧,并在注册时创建函数的引用及线程安全函数...(options, thenWrapper, catchWrapper)因为本例中的filepicker是异步的,回调函数需要调用者传入,而napi中若需要将native方法直接封装为ets方法对于函数类型是有要求的...因此这里通过将回调函数封装到对象中,通过对象包装来实现将一般类型的函数封装为ets侧的函数:native侧: // step:类型声明 class DocumentViewPickerSelectThenCbWrapper...windowStage.on("windowStageEvent") 来获取当前活跃窗口对应的UIContext,从理论上来讲,因为事件的处理流程有如下两条并行路径,因此在2in1设备的多实例场景下,直接点击失焦窗口的按钮时

    58620

    HarmonyOS 开发实践 —— 基于JSVM创建引擎执行JS代码并销毁

    );  }  OH_LOG_ERROR(LOG_APP, "JSVM ReleaseJsCore END");  return nullptr;}JS 中调用的 C++ 代码实现调用的C++方法类似于NAPI...自定义C++代码中的JSVM的常用接口与NAPI的接口类似,可参考文档底部的官方文档。...// 用以在native层中调用TS侧传入的Callback函数static JSVM_Value OnJSResultCallback(JSVM_Env env, JSVM_CallbackInfo...callback = nullptr;  // 通过callId获取在创建当前JSVM环境时传入的TS回调方法  napi_get_reference_value(g_napiEnvMap[callId...,这样就不会出现像有的数据成员没有销毁导致内存泄露的问题或者程序直接崩溃    virtual ~Task() = default;  // virtual纯虚函数的类是一个抽象类  virtual void

    67220
    领券