独钓寒江雪

用C++的优雅,驯服Windows的狂野

本文主要介绍如何在 Node-API 中实现不同类型的接口,主要有下面几种类型:

  • 同步调用
  • 基于 Napi::AsyncWorker 的异步调用,通过回调函数返回
  • 异步调用,返回 Promise
  • 基于 Napi::ThreadSafeFunction 的异步调用,通过回调函数返回
阅读全文 »

ABI 是 Application Binary Interface 的缩写,当我们以二进制形式(非源码形式)发布我们的动态库时,就需要关心ABI兼容(也称二进制兼容)。

对于静态库,更新静态库始终都需要该库的使用方重新编译,因此不存在ABI兼容的说法。

阅读全文 »

在使用 Electron 开发客户端时,如果现有 Node 模块所提供的功能无法满足需要,我们可以使用 C++ 开发自定义的 Node 模块,也称插件(addon)。

Node.js 插件的扩展名为 .node,是二进制文件,其本质上是通过动态链接库(.dll 或 .so)重命名而来。

阅读全文 »

spdlog是一个高性能 C++日志库,可以支持仅头文件(header-only)模式使用。

官网地址:

https://github.com/gabime/spdlog

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++中涉及的整数相关的类型大致有如下几种:

  • char、unsigned char
  • short、unsigned short
  • int、unsigned int
  • long、unsigned long
  • long long、unsigned long long
  • int8_t、uint8_t
  • int32_t、uint32_t
  • int64_t、uint64_t
  • DWORD
  • DWORD32、DWORD64
  • size_t、ssize_t
  • SIZE_T、SSIZE_T
阅读全文 »

在 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属性的窗口都可以称为顶级窗口。

人生于世,一味勤,不见得是好事。

与人处,得小懒。管头管脚,大到原则问题,小至鸡毛蒜皮,样样都想插一手。这样的相处模式,除了惹人厌,再难有其他结果。容他人藏点隐私,给彼此留点空间,这样的小懒,比起所谓的无微不至更令人欣赏。

与人言,也得小懒。话不能说得太满,意犹未尽之处,于人于已都是余地。留有这样的余地,日后才好转圜。同样的意思,横冲直撞与婉转留余,可能带来不同的结果。留一线,好相见,这样的留,自然是小懒。

阅读全文 »
0%