用vs2013开发node.js的addon.
- 下载node.js的源代码。
https://github.com/joyent/node
如果用svn下载,后面加上/trunk,以免把用不着的branches也下载下来,浪费时间。
- 安装VS, express版本也可以。我安装的是vs2013 ultimate.
- 安装python 2.x
http://www.python.org/download/
注意不能是3.x, 因为node-gyp目前需要2.x. 我安装的是2.7。
- 用命令行工具,Cd到node源代码目录,运行vcbuild.bat。
成功后,会生成Release或者Debug目录以及其他文件。我的生成是Release目录。我们需要的是这个路径下的node.lib 文件,以便在我们的c++项目中引用。
- 打开VS2013,创建一个c++空项目。我的项目起名为myaddon2.

- 添加一个main.h和main.cpp文件。这两个文件可以分别放在include和 src 文件夹中,以方便管理。
在main.cpp引用main.h文件。
#include
"main.h"由于main.h是放在include文件夹中,需要设置一下才可以。

- 设置头文件的引用路径。
需要添加node源代码路径的src, deps\v8\include, deps\uv\include.
- 添加lib所在路径。我们需要这个路径下的node.lib文件。

- 在Linker中填入node.lib.

- 打开网页:
https://nodejs.org/api/addons.html#addons_wrapping_c_objects
复制代码并更改,以下是具体文件的代码:
Main.h 空。
Main.cpp:
|
#include #include #include
using
void InitAll(Handle<Object> exports) { MyObject::Init(exports); }
NODE_MODULE(myaddon2, InitAll) |
Myobject.h
|
#ifndef MYOBJECT_H #define
#include #include
class public: static
private: explicit MyObject(double value = 0); ~MyObject();
static static static v8::Persistent<v8::Function> constructor; double value_; };
#endif |
Myobject.cpp
|
#include
using
Persistent<Function> MyObject::constructor;
MyObject::MyObject(double }
MyObject::~MyObject() { }
void Isolate* isolate = Isolate::GetCurrent();
// Prepare constructor template Local<FunctionTemplate> tpl = FunctionTemplate::New(isolate, New); tpl->SetClassName(String::NewFromUtf8(isolate, "MyObject")); tpl->InstanceTemplate()->SetInternalFieldCount(1);
// Prototype NODE_SET_PROTOTYPE_METHOD(tpl, "plusOne", PlusOne);
constructor.Reset(isolate, tpl->GetFunction()); exports->Set(String::NewFromUtf8(isolate, "MyObject"), tpl->GetFunction()); }
void Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate);
if (args.IsConstructCall()) { // Invoked as constructor: `new MyObject(...)` double value = args[0]->IsUndefined() ? 0 : args[0]->NumberValue(); MyObject* obj = new obj->Wrap(args.This()); args.GetReturnValue().Set(args.This()); } else { // Invoked as plain function `MyObject(...)`, turn into construct call. const Local<Value> argv[argc] = { args[0] }; Local<Function> cons = Local<Function>::New(isolate, constructor); args.GetReturnValue().Set(cons->NewInstance(argc, argv)); } }
void Isolate* isolate = Isolate::GetCurrent(); HandleScope scope(isolate);
MyObject* obj = ObjectWrap::Unwrap<MyObject>(args.Holder()); obj->value_ += 1;
args.GetReturnValue().Set(Number::New(isolate, obj->value_)); } |
- 调试。
设置vs的debug命令和工作路径。

调试开始后,会自动启动node命令行。
可以执行以下的命令查看效果。

如果在 VS 中打上断点,可以进行跟踪。
- 使用addon.
将生成的myaddon2.node文件拷贝到node.js项目文件夹或者子文件夹下。
var myaddon2 = require("./addons/myaddon2")
, nodeJsAddOncdObj;
app.post('/api/increase/:num', function (req, res){
if( !myobj ) myobj = new myaddon2.MyObject(req.params.num);
res.format({
//HTML returns us back to the main page, or you can create a success page
html: function(){
//only return json.
},
//JSON returns the item with the message that is has been deleted
json: function(){
res.json({
success:true,
result : myobj.plusOne()
});
}
});
});
用vs2013开发node.js的addon.的更多相关文章
- 在开发node.js中,关于使用VS2013插件出现一直读取资源的问题
情况描述: 1.安装了VS2013: 2.安装了VS开发node.js的插件; 3.打开以前的工程文件,有的可以打开,有的打不开.而且打不开的始终停留在读取资源的界面.很痛苦的.等半天都没有反应.到底 ...
- 【转】使用VS开发 Node.js指南
参考:https://www.visualstudio.com/features/node-js-vs 这篇文章主要介绍了使用VS开发 Node.js的方法,主要是使用NTVS(Node.js Too ...
- VS2013创建Node.js C++ Addons的过程
首先看我的Node.js版本. node –v v6.11.4 然后参照这篇文章来做: https://nodejs.org/api/addons.html#addons_hello_world 安装 ...
- VS轻松开发Node.js应用
PTVS开发团队又开发出一款可以在VS里编写Node.js应用程序的插件--NTVS(Node.js Tools for Visual Studio),开发者可以在VS里轻松开发Node.js应用. ...
- 在Visual Studio上开发Node.js程序(2)——远程调试及发布到Azure
[题外话] 上次介绍了VS上开发Node.js的插件Node.js Tools for Visual Studio(NTVS),其提供了非常方便的开发和调试功能,当然很多情况下由于平台限制等原因需要在 ...
- 在Visual Studio上开发Node.js程序
[题外话] 最近准备用Node.js做些东西,于是找找看能否有Visual Studio上的插件以方便开发.结果还真找到了一个,来自微软的Node.js Tools for Visual Studio ...
- 在Visual Studio 2013 上开发Node.js程序
[题外话] 最近准备用Node.js做些东西,于是找找看能否有Visual Studio上的插件以方便开发.结果还真找到了一个,来自微软的Node.js Tools for Visual Studio ...
- 在Sublime Text3 开发Node.js遇到的一个小问题
原文摘自我的前端博客,欢迎大家来访问 http://www.hacke2.cn 以前的Sublime Text 2包管理出现问题了,不能安装新包,让人开发很捉急,今天装了个3,这个问题解决了 那我们就 ...
- KoaHub.js:使用ES6/7特性开发Node.js框架
KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架.可以直接在项目里使用 ES6/7(Generator Function, Class, Async & ...
随机推荐
- python语法(一)
Python是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.在近几年,大数据,人工智能火起来之后也是水涨船高,被越来越多的人知道,并且越来越多 ...
- PHP5.3以上版本使用pthreads PHP扩展真正支持多线程
class test_thread_run extends Thread{public $url;public $data; public function __construct($url){$th ...
- bzoj 1590: [Usaco2008 Dec]Secret Message 秘密信息
1590: [Usaco2008 Dec]Secret Message 秘密信息 Description 贝茜正在领导奶牛们逃跑.为了联络,奶牛们互相发送秘密信息. 信息是二进制的,共 ...
- Linux下rz,sz与ssh的配合使用,实现文件传输
一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地: 与ss ...
- BZOJ5137[Usaco2017 Dec]Standing Out from the Herd
看了半天题 不知道怎么用SAM维护 于是借(chao)鉴(xi)的一发神犇的 只要判断这个子串之前被标记的记号(也就是他属于第几个串)和这次转移到的是否相同 如果不同就说明该子串属于多个串 直接标记- ...
- python开发_函数的参数传递
在这个用例中,我们要讨论的是关于函数的传参问题 我所使用的python版本为3.3.2 对于函数: def fun(arg): print(arg) def main(): fun('hello,Ho ...
- poj 1328 Radar Installation 排序贪心
Radar Installation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 56702 Accepted: 12 ...
- Linux学习之CentOS(十三)--CentOS6.4下Mysql数据库的安装与配置(转)
原文地址:http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 如果要在Linux上做j2ee开发,首先得搭建 ...
- java 反射机制之 getDeclaredMethod()获取方法,然后invoke执行实例对应的方法
关于反射中getDeclaredMethod().invoke()的学习,来源于项目中的一行代码: SubjectService.class.getDeclaredMethod(autoMatchCo ...
- CentOS 7 下编译安装lnmp之MySQL篇详解
一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.MySQL下载 MySQL ...