千里之行,从写一个 node addon 开始。因为需要一个执行 Win32 API 的项目开展实验和测试。容易混淆的 3 个概念:c++ addons api, N-API, node-addon-api. 简单地说,c++ addons api 表示最底层 api,直接从它来写会非常复杂。N-API 在这前者之上做了一层抽象,解决了不同版本兼容的问题,但也还是很复杂,基于c 的实现。而 node-addon-api 是N-API 的 C++封装,用起来相对容易很多。所以我们选择了 node-addon-api 来开发。

1 开发环境:

在此假设你已经安装了 git 和 node。在命令行执行
npm install --global --production windows-build-tools
将安装 vs build tools 和 python,cc,make 用于编译。
编写代码可以使用任意的你喜欢的编辑器。个人偏爱 vs code。

2 第一个项目

安装脚手架
npm install -g yo    // 国内网络困难请用 npm --registry https://registry.npm.taobao.org install -g yo
npm install -g generator-napi-module
生成 node addon 项目
mkdir win32-printer
cd win32-printer
yo napi-module
报告错误
yo : 无法加载文件 C:\Users\Administrator\AppData\Roaming\npm\yo.ps1,因为在此系统上禁止运行脚本
解决方法:
用管理身份打开 powershell,执行命令
set-ExecutionPolicy RemoteSigned
将计算机上的 执行策略更改为 RemoteSigned。检查:
get-ExecutionPolicy
运行测试一下
命令
npm test
出现
Tests passed- everything looks OK!
说明编译环境搭建无误了。

3 修改项目

添加编译指令
修改 package.json 的内容:
"scripts": {// 添加的内容"build": "node-gyp build","start": "node --napi-module ./test/run.js”,"test": "node --napi-modules ./test/test_binding.js"},

添加文件 ./src/run.js

const Win32Printer = require("../lib/binding.js");const result = Win32Printer("hello");console.log(result)

修改下 src/win32_printer.cc

const Win32Printer = require("../lib/binding.js");
// 把 return 的文本改了一下
const result = Win32Printer("hello");console.log(result)

编译和执行

命令执行
npm run build
npm run start
屏幕打出 mini world 编译执行成功

从零开始写 win32 打印机任务管理的 node 模块 (2)node-addon-api相关推荐

  1. win32 打印机任务管理的 node 模块 (3)详解Win32 Spooler API 获取打印机列表及状态

    上篇讲了如何写一个 node addon,这篇开始讲述如何调用 Win32 Spooler API 实现打印的完整功能.项目的代码在 https://gitee.com/csling/win32-pr ...

  2. node.js学习之npm 入门 —8.《怎样创建,发布,升级你的npm,node模块》

    怎样创建,发布,升级你的npm,node模块 原文 node.js module(模块)是package的一种,能够发布到npm.从创建一个package.json文件开始来创建一个module. 使 ...

  3. 【Android项目实战 | 从零开始写app(十三)】实现用户中心模块清除token退出登录信息修改等功能

    五一后,被ji金伤了,哇呜呜,还是得苦逼老老实实打工写代码,看下面吧 本篇实现效果: 实现登录用户名展示到用户中心页面上,并且页面有个人信息,订单列表,修改密码,意见反馈发送到服务端,前面登录后,通过 ...

  4. 使用Node.js+Koa 从零开始写个人博客系统——后端部分(一)

    使用Node.js+Koa 从零开始写个人博客系统系列 提示:在此文章中你可以学习到的内容如下: 1 如何使用Koa快速搭建项目 2 对Koa的核心组件Koa-Route的简单使用 3 3层架构思想 ...

  5. 从零开始写一个武侠冒险游戏-3-地图生成

    2019独角兽企业重金招聘Python工程师标准>>> 从零开始写一个武侠冒险游戏-3-地图生成 概述 前面两章我们设计了角色的状态, 绘制出了角色, 并且赋予角色动作, 现在是时候 ...

  6. 从零开始学Win32平台缓冲区溢出(Part1)

    原文:Stack Based Buffer Overflow in Win 32 Platform: The Basics 译者:鸢尾 来源:从零开始学Win32平台缓冲区溢出(Part1) 缓冲区溢 ...

  7. 如何搭建python框架_从零开始:写一个简单的Python框架

    原标题:从零开始:写一个简单的Python框架 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 你为什么想搭建一个Web框架?我想有下面几个原因: 有一个 ...

  8. python 小说爬虫_从零开始写Python爬虫 --- 1.7 爬虫实践: 排行榜小说批量下载

    从零开始写Python爬虫 --- 1.7 爬虫实践: 排行榜小说批量下载Ehco 5 个月前 本来只是准备做一个爬起点小说名字的爬虫,后来想了一下,为啥不顺便把小说的内容也爬下来呢?于是我就写了这个 ...

  9. Node.js「一」—— Node.js 简介 / Node.js 模块 / 包 与 NPM

    本文为 Node.js 系列笔记第一篇.文章参考:nodejs 教程 -- 大地:<深入浅出 Node.js>:阮一峰 nodejs 博客 文章目录 一.Node 简介 1. 简单介绍 2 ...

最新文章

  1. auto make System.map to C header file
  2. Django中的日期和时间格式 DateTimeField
  3. 在大规模系统中使用Scala
  4. 在SQL中检查约束-用MySQL和SQL Server语法示例解释
  5. 【微信公众平台开发】之一:入门与BAE3.0下操作
  6. UnitOfWork实战
  7. DELL服务器R730重装Window Server2012系统
  8. 如何把map的value转为list_如何在Java中将Map转换为List?
  9. Distral: Robust multitask reinforcement learning.
  10. thon中的全局变量
  11. flux_屏幕色温调控
  12. 学习:浏览器设置Burpsuite代理后打不开网页
  13. 国外免费杀毒软件AVG、Avast、小红伞体验
  14. 初入门的C++小语法
  15. Linux基础(2)
  16. macos安装urar具体步骤_U盘安装MAC OS 系统步骤
  17. 为大家介绍一下自制DIY面膜的好地方
  18. 前端面试+学习笔记(HTML+CSS+JavaScript+ES6+Vue+NodeJs)
  19. P1981 [NOIP2013 普及组] 表达式求值
  20. Python学习手册(第4版) pdf

热门文章

  1. 【2022考研】 肖四大题(马原第一套)背诵笔记
  2. 安全好用的快充头,iPhone 13的好搭档,RAVPOWER 20W充电器上手
  3. DS5000神奇的FDE全磁盘加密技术
  4. 【汇正财经】企业资本的意义
  5. Antd如何在label里增加icon图标
  6. RESTful架构和实现级别
  7. nltk中文分句_learn_nltk/2. NLTK笔记-分句与分词.md at master · ourren/learn_nltk · GitHub...
  8. 怎样将音频变声?1分钟教你音频变声怎么弄!
  9. 这台笔记本最适合程序员编程!!
  10. 项目实施如何推动落地?(PDCA戴明环)