
windows下的c++ addon for nodejs
记录自己学习用c++开发nodejs插件的过程,内容很简单,没有展开一些知识点的讲解
分号
爱好编程、游戏、旅游
展开
-
nodejs c++ 插件编译踩坑记
这里尤其是在electron里引用了c++插件时,需要注意这个问题,因为electron内集成的node,和官方的node版本其实是不完全一样的,除了上述NAPI_VERSION以外,还要注意abi的版本,因为这个限定了API调用的约定,如果不一致,那么即便你编译插件通过了,实际运行electron程序时,依然会报错。插件的作者(或者你),在开发时的本机环境,可能与使用者是不一样的,所以有时候下载的插件不能通过编译而报错,那么其中之一的检查项,就是检查插件的node api版本。当然可以,没什么问题。原创 2022-11-15 11:41:13 · 971 阅读 · 0 评论 -
九,善用工具
在前面的文章中,很多东西都是手撸的,比如那个binding.gyp,其实还是有工具可用,下面我将介绍两款工具,可以辅助我们开发一,generator-napi-module这是一个生成器,可以帮助我们快速搭建项目,具体用法如下:// 安装Yeomannpm install -g yo// 安装生成器npm install -g generator-napi-module// 创建一个项目目录,比如叫 hello,然后进入这个目录,运行yo命令生成工程yo napi-module/原创 2021-03-24 11:05:05 · 524 阅读 · 0 评论 -
八,查缺补漏
前面写的一些例子,还不是很好,比如海康SDK的初始化和注销,由于只需要全局执行一次,所以其实应该属于CKSHikCameraWrapper 类,作为类的方法而存在。具体怎么做,实际上如果仔细看例子的同学已经知道了,就是在CKSHikCameraWrapper 类的CreateNewItem 方法,我们参照这个写法,写两个类的静态方法就可以了:...原创 2021-03-23 17:06:01 · 280 阅读 · 0 评论 -
七,来点高级的
写hello world,对于新手来说很有必要,但是对于希望能玩点更高级的来说,感觉就差那么点意思了,所以我们来写一个海康摄像头抓拍的插件吧(其实眼尖的人,看到我之前建的项目名称,大致能想到了)这篇文章,会学到这么几个知识点:1,设置第三方头文件、静态库文件2,传参,javascript和c++代码之间如何相互传参3,返回值4,异常node-gyp rebuild --debug --arch=$arch注意以上命令,由于一些第三方c++ DLL,比如海康SDK,分x86.原创 2021-03-15 12:05:24 · 1018 阅读 · 0 评论 -
六,bindings
1,初始化gypnode-gyp install此命令会初始化gyp的一些nodejs头文件,这些文件下载在当前windows用户的.node-gyp目录下2,生成项目文件node-gyp configure需要自行创建binding.gyp,这个文件用于描述nodejs的构建结构3,生成项目node-gyp build...原创 2021-03-12 11:54:20 · 911 阅读 · 0 评论 -
五,hello world
本书开发,使用的是vscode为IDE。我们还是先按咱程序员通用的例子,hello world开始吧:一,创建项目先创建一个工程目录,在此目录下,安装c++ addon 开发包:npm install --save node-addon-api运行此命令后,会生成如下图所示的目录及内容其中,node_modules下的node_addon-api里的内容,就是开发插件需要用到的源代码和一些工具。接下来创建binding.gyp文件,用来描述这个工程{ "targets原创 2021-03-12 11:52:45 · 182 阅读 · 0 评论 -
四,binding.gyp配置文件粗解
用#符号作为注释{ "targets": [ { # 链接目标,链接之后,生成 "greet.node" "target_name": "greet", "cflags!": [ "-fno-exceptions" ], "cflags_cc!": [ "-fno-exceptions" ], # C++源文件 "sources": [ "./src/greeting.cpp", ...原创 2021-03-12 11:53:50 · 1548 阅读 · 0 评论 -
三,调试环境
既然是C++插件,那其实还是开发C++程序啦,所以调试是必不可少的,这里我以VSCODE为IDE,介绍在它上面的调试环境怎么配置,首先安装一个VSCODE,(^_-)然后安装两个插件:C/C++ms-vscode.cpptools CodeLLDBvadimcn.vscode-lldb一个是智能提示,一个用于调试C/C++程序,更多具体的用法,大家度娘吧,我就不啰嗦了。1,配置c_cpp_properties.json,让智能提示智能起来,没什么特别的,应该都能看明白其含义{ .原创 2021-03-24 14:08:43 · 693 阅读 · 2 评论 -
二,nodejs 插件开发方式简介
1, NANnode.js 原生抽象帮助包 https://github.com/nodejs/nan,用于兼容各个nodejs版本,但是nodejs版本改了,依然要重新编译2, NAPINode.js 的所有底层数据结构全部黑盒化,抽象成 N-API 当中的接口,做到ABI化应用二进制接口( Application Binary Interface )。这使得在不同 Node.js 下,只要 ABI 的版本号一致,编译好的 C++ 扩展就可以直接使用,而不需要重新编译3, node-a原创 2021-03-12 10:17:41 · 720 阅读 · 0 评论 -
一,搭建开发环境
1,安装构建器 node-gypnpm install -g node-gyp2,设置NPM镜像,以解决npm下载太慢的问题NODEJS_ORG_MIRROR淘宝镜像:https://npm.taobao.org/mirrors/node3, 环境和编译器有两种方式搭建:3.1直接使用NPM构建使用npm 的 windows-build-tools,里面包含了visual c++ build tools 和 python 2.7npm install --global --pr.原创 2021-03-12 10:12:57 · 248 阅读 · 0 评论