用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 & ...
 
随机推荐
- Linux命令学习<不断更新>
			
没有系统的学习过Linux命令,遇到了就学习一下,慢慢积累. 1.echo 命令,学习网站『https://linux.cn/article-3948-1.html』. echo单词有回声.共鸣的意思 ...
 - 凡信(超仿微信Android版)开源了,内有源码下载 -
			
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 凡信(超仿微信Android版)开源了,内有源码下载 - IM Geek开发者社区-移动 ...
 - Hibernate与Mybatis对比
			
Hibernate与Mybatis对比 两者相同点 Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由Ses ...
 - Elasticsearch基础分布式架构
			
写在前面的话:读书破万卷,编码如有神-------------------------------------------------------------------- 参考内容: <Ela ...
 - Codeforces Round #259 (Div. 1) A. Little Pony and Expected Maximum 数学公式结论找规律水题
			
A. Little Pony and Expected Maximum Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.c ...
 - SCC缩点
			
int V; //顶点数量 vector<int> G[max_v]; //图的邻接表表示方法 vector<int> rG[max_v]; //把边反向建的图 vector& ...
 - POJ 1654 Area 计算几何
			
#include<stdio.h> #include<string.h> #include<iostream> #include<math.h> usi ...
 - MYSQL-5.5.37-win32.msi  这个版本得程序包谁有吗  可以给我一下吗?
			
之前下载了这个版本得mysql 但是跟服务器链接不上 后来我就卸载了 但由于卸载不干净 现在又删了注册表 好像把这个程序包得什么文件删除了 现在提示配置文件错误 所以有这个程序包得 ...
 - HDU 2089 不要62(数位DP·记忆化搜索)
			
题意 中文 最基础的数位DP 这题好像也能够直接暴力来做 令dp[i][j]表示以 j 开头的 i 位数有多少个满足条件 那么非常easy有状态转移方程 dp[i][j] = sum{ dp[ ...
 - 最好的PHP博客系统
			
1.Wordpress http://www.wordpress.org/ B2基础上开发而来,这是国内用户比较喜欢而且用户较多的一个php博客程序,缘由是因为Wordpress提供大量插件和模板,让 ...