Node插件开发(2)-调用方式
本文主要介绍如何在 Node-API 中实现不同类型的接口,主要有下面几种类型:
- 同步调用
- 基于 Napi::AsyncWorker 的异步调用,通过回调函数返回
- 异步调用,返回 Promise
- 基于 Napi::ThreadSafeFunction 的异步调用,通过回调函数返回
本文主要介绍如何在 Node-API 中实现不同类型的接口,主要有下面几种类型:
ABI 是 Application Binary Interface 的缩写,当我们以二进制形式(非源码形式)发布我们的动态库时,就需要关心ABI兼容(也称二进制兼容)。
对于静态库,更新静态库始终都需要该库的使用方重新编译,因此不存在ABI兼容的说法。
在使用 Electron 开发客户端时,如果现有 Node 模块所提供的功能无法满足需要,我们可以使用 C++ 开发自定义的 Node 模块,也称插件(addon)。
Node.js 插件的扩展名为 .node,是二进制文件,其本质上是通过动态链接库(.dll 或 .so)重命名而来。
spdlog是一个高性能 C++日志库,可以支持仅头文件(header-only)模式使用。
官网地址:
spdlog 是线程安全的,但不是进程安全的,可以多个线程同时使用一个 spdlog 对象输出日志,但不能多个进程同时往一个文件写入日志。
在 spdlog 内部使用fmt进行字符串的格式化,因此 spdlog 字符串格式的方式与 fmt 库相同,如:
1 | spdlog::critical("Support for int: {0:d}; hex: {0:x}; oct: {0:o}; bin: {0:b}", 42); |
在 C/C++中涉及的整数相关的类型大致有如下几种:
SetParent是Windows提供的设置窗口父窗体的API,函数原型比较简单:
1 | HWND SetParent( |
在 Windows 系统中,我们按下 Win+D 快捷键执行“显示桌面”时,会将桌面上的所有窗口都最小化到任务栏,再次按下还会还原窗口状态。如果在执行显示桌面操作时,有些窗口仍然保持显示状态,不被最小化,这些窗口称之为逃脱了显示桌面指令。
实现逃脱显示桌面的方式有三种,每种方式有不同的应用场景。
在Windows API中经常会出现关于顶级窗口的描述,如 EnumWindows函数的说明:
Enumerates all top-level windows on the screen by passing the handle to each window, in turn, to an application-defined callback function. EnumWindows continues until the last top-level window is enumerated or the callback function returns FALSE.
那么什么样的窗口才算得上是顶级窗口了?
简而言之,就是没有WM_CHILD属性的窗口都可以称为顶级窗口。