https://zh.wikipedia.org/wiki/Native_API
    Windows API就是基于Native APi封装得

    两种方案

    写c++ 然后使用node-gyp编译成.node(要会写C++ 成本高)

    node-ffi本质也是一个使用c++编写动态链接库,所以要编译node-ffi
    (不需要编写源代码,不需要重新编译)本地库/第三方C++库

    .dll和.node都是二进制哦
    image.png
    image.png

    官方建议的是使用addon,因为node-ffi性能有折损

    1. node-gyp (两个都要使用)
    2. windows-build-tools

    一、C++ Addons

    image.png
    Node C++ Addons(扩展)

    • node的扩展是C++编写得动态链接库共享对象,能被Node require使用
    • node的扩展 .node文件,本质上是动态链接库(windows得.dll,Mac得.dylib, linux得.so)
    • 编写c++扩展得主流两种写法
    1. NAN(Native Abstractions for Node.JS):一次编写、到处编译
    2. N-API(node的一部分,独立于runtime v8):统一API,无需重新编辑(不需要考虑node版本)

    本身是基于C的API
    c++封装的node-addon-api

    .node文件本质上就是一个dll,require他的时候会根据平台调用不同的windows api去load 一个dll

    使用C++扩展

    gyp为true 这样别人用你的库的时候就会编译
    C++文件 使用node-gyp来打包 成.node文件
    安装的时候会使用node-gyp帮我们rebuild

    registry-js的就是打包成了一个.node文件

    二、node-ffi Electron集成dll(动态链接库)
    image.png
    本质上node-ffi是js加载和调用动态库的node.js拓展,让我们不用编写任何c++代码,创建于本地dll库的绑定

    不需要每次都重新编译,性能有折损。

    什么时候用dll

    • 使用系统API操作(唤起微信的窗口)
    • 使用第三方dll,硬件设备进行通信

    image.png