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共享库。

 

发布了9 篇原创文章 · 获赞 13 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qianlixiaomage/article/details/103730258
今日推荐