visual studio开发nodejs的C++扩展

visualStudio封装nodejs的C++扩展

1.背景

都知道vscode在封装nodejs的C++扩展时,通过配置python、node-gyp等环境,就可以在windows和linux下编译出.node,但本人觉得那个环境配置比较麻烦,简单的代码一小时,环境三四天。对于偏爱vs开发C++的我,对vs在windows下编译.node进行了相关研究。

2.清单

  1. visual studio;(2)nodejs头文件;(3)nodejs库文件即node.lib。

3.配置

(1)新建控制台应用程序;

(2)打开项目=》属性=》C/C++=》附加包含目录,加入nodejs的头文件目录;

(3)打开项目=》属性=》链接器=》附加库目录,加入nodejs的库所在目录,如果有其他库同理;

(4)打开项目=》属性=》链接器=》输入,加入node.lib,如果有其他库同理;

(5)打开项目=》属性=》常规=》配置类型,选择动态链接库;

(6)打开项目=》属性=》常规=》扩展名,输入.node;

至此,配置完成,是不是非常简单,当然这也是visual studio使用的基本手法,以上要注意的是,附加包含目录尽量不要填到了VC++中的库目录,具体细节可以看看这两者的区别。

4.Demo

以下是一个简单的求和函数,没有返回值,仅打印结果,本文的主要目的是介绍方法,具体细节可参考nodejs官方文档。

#include <iostream>

#include <node.h>

#include <v8.h>

using namespace std;

using namespace cv;

using namespace v8;

void add(const FunctionCallbackInfo<Value>& args) {

  v8::Isolate* isolate = args.GetIsolate();
  isolate = args.GetIsolate();
  v8::HandleScope scope(isolate);

  int argnum = args.Length();

  if (argnum != 2)
  {
    cout << "Wrong parameter" << endl;
    return;
  }

  if (!args[0]->IsNumber() || !args[1]->IsNumber())
  {
    cout << "parameters type error" << endl;
    return;
  }

  // 解析第一个参数
  int num1 = args[0].As<Number>()->Value();
  cout << "num1: " << num1 << endl;
  // 解析第二个参数
  int num2 = args[1].As<Number>()->Value();
  cout << "num2: " << num2 << endl;
  int sum = num1+num2;
  cout<<”sum is:”<<sum <<endl;
}

void Initialize(Local<Object> exports) {
  NODE_SET_METHOD(exports, "add", add);
}

NODE_MODULE(test,

这是一个最简单的demo,更多可参考官网。

5.测试

编译项目在步骤4中会生成test.node,编写简单js脚本对生成的扩展进行测试。

let add = require(“./test.node”);

add(1,2);

运行结果:

sum is 3

6.调试.node(以其他项目为例)

在项目属性中配置相关调试属性等,然后在C++代码中打上断点,即可进行调试。

 调试过程:(可以进入库源码内部)

7.总结

本文介绍了windows下利用visualstudio开发nodejs的C++扩展的方法,优点是配置简单,熟悉C++熟悉vs的人可以很快上手,缺点暂未发现。下一阶段目标是研究linux下利用libnode.a以及头文件以同样的方式在vs中远程开发nodejs的C++扩展,目前的进展是已经源码编译出linux下的nodejs共享库。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我啥都会

如果觉得对您有帮助,打赏一下吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值