nodejs: C++扩展
Nodejs的C++扩展
首先保证nodejs和v8都正确安装
下载NodeJS源码,我的放在D盘。
NodeJS的C++扩展要用VS2010开发,新建一个空的Win32控制台项目,右键——属性,在常规中将目标文件扩展名改为.node

在C/C++,常规中,在附加包含目录中添加NodeJS包含目录 ,D:\nodejs\include
在连接器——常规中的附加库目录中添加NodeJS的lib库: D:\nodejs\lib
在输入中添加附加库依赖项:node.lib
配置完毕,就可以就行扩展开发了。
新建hello.cpp
#include <node.h>
#include <string>
using namespace std;
using namespace v8;
Handle<Value> Hello(const Arguments& args)
{
HandleScope scope;
return scope.Close(String::New("Hello world!"));
}
Handle<Value> Add(const Arguments& args)
{
HandleScope scope;
if (args.Length() < )
{
ThrowException(Exception::TypeError(String::New("Wrong number of arguments")));
return scope.Close(Undefined());
}
if (!args[]->IsNumber() || !args[]->IsNumber())
{
ThrowException(Exception::TypeError(String::New("Wrong arguments")));
return scope.Close(Undefined());
}
Local<Number> num = Number::New(args[]->NumberValue() +
args[]->NumberValue());
return scope.Close(num);
}
extern "C"
{
void init(Handle<Object> target)
{
NODE_SET_METHOD(target, "hello", Hello); //对外输出hello方法
NODE_SET_METHOD(target, "add", Add);
}
//输出的扩展类名hello
NODE_MODULE(hello, init)
}
执行命令
编译
会在当前目录生成Release/hello.node
编写nodejs脚本hello.js
var cpphello = require('./Release/hello');
console.log(hello.hello()); // hello world
console.log(hello.add (2,3)); //
执行命令
按照前面文章的提示,在node目录下,执行命令行
>node hello.js
即可看到输出
hello world!
5
nodejs: C++扩展的更多相关文章
- 解决mac上每次升级nodejs都要重新安装扩展包的问题
虽然有了一些新生派竞品比如yarn,但使用或者习惯了npm的开发者仍然大有人在. 以前用起来没注意到这个现象,最近一段时间发现,每次随着使用brew upgrade自动升级了nodejs版本,原来安装 ...
- NodeJS之Mac初体验
NodeJS之前在Window试用过一下,不过在mac上这种类Unix上属于第一次使用,JavaScript是脚本语言,脚本语言都需要一个解析器才能运行,通常我们在Html页面写的JS,浏览器充当了解 ...
- 浅析 Nodejs 模块化
本文只讨论 CommonJS 规范,不涉及 ESM 我们知道 JavaScript 这门语言诞生之初主要是为了完成网页上表单的一些规则校验以及动画制作,所以布兰登.艾奇(Brendan Eich)只花 ...
- nodejs代码初探之nodejs启动
nodejs启动 入口在node_main.cc,解析参数后进入node.cc 中的node::Start() V8::Initialize() //初始化v8SetupProcessObject() ...
- 用“MEAN”技术栈开发web应用(二)express搭建服务端框架
上一篇我们讲了如何使用angular搭建起项目的前端框架,前端抽象出一个service层来向后端发送请求,后端则返回相应的json数据.本篇我们来介绍一下,如何在nodejs环境下利用express来 ...
- 实现手机扫描二维码页面登录,类似web微信-第二篇,关于二维码的自动生成
转自:http://www.cnblogs.com/fengyun99/p/3541251.html 接上一章,我们已经基本把业务逻辑分析清楚了 下面我们第一步,实现二维码的web动态生成. 页面的二 ...
- bat文件的妙用1-一键开启所有开发软件
每天早上来的第一件事情,就是打开电脑,然后开一堆的软件 1.wamp 开发环境 2.钉钉 通讯工具 3.PHPstrom 开发工具 4.nodejs.bat Nodejs的扩展(node D:/w ...
- “MEAN”技术栈开发web应用
“MEAN”技术栈开发web应用 上一篇我们讲了如何使用angular搭建起项目的前端框架,前端抽象出一个service层来向后端发送请求,后端则返回相应的json数据.本篇我们来介绍一下,如何在no ...
- express中间件笔记整理
expressexpress概念:express是基于nodejs的HTTPS模块构建出来的一个web应用开发框架,在nodejs之上扩展了 Web 应用所需的基本功能.本质上express应用就是调 ...
随机推荐
- No.2__C#
几经波折——多事之秋的第二周 这周的事情还有点多, 应该已经是上周了确切的说.总的来说,上周的数据结构的学习进行的很顺利.最让自己惊喜的是,居然很快就派上了用场,这也坚定了我学习的信念,极大地鼓舞了我 ...
- 28. Triangle && Pascal's Triangle && Pascal's Triangle II
Triangle Given a triangle, find the minimum path sum from top to bottom. Each step you may move to a ...
- #pragma pack(n)
#pragma pack(n) 重要规则: 1,复杂类型中各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个类型的地址相同: 2,每个成员分别对齐,即每个成员按自己的方式对齐,并最小 ...
- ie6并不是不支持!important
之前对ie6接触不多,并且认识也不深,虽然知道ie6中的!important很特别,但是并没有记住特别在哪里~今天就记录一下吧! 首先,很多人说ie6是不支持!important的,其实这个一个错误的 ...
- 通过 ES6 Promise 和 jQuery Deferred 的异同学习 Promise
Deferred 和 Promise ES6 和 jQuery 都有 Deffered 和 Promise,但是略有不同.不过它们的作用可以简单的用两句话来描述 Deffered 触发 resolve ...
- Servlet的过滤器Filter
Servlet 编写过滤器 Servlet 过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息. 可以将一个或多个 Servlet 过滤器附加到一个 Servlet 或一组 Serv ...
- 8.adr与ldr伪指令的区别
ldr和adr都是伪指令,区别是ldr是长加载.adr是短加载. 重点:adr指令加载符号地址,加载的是运行时地址: ldr指令加载符号地址时,加载的是链接地址.
- C# 數據事務操作
public sealed class SQLFunc { #region Methods #region OpenConnection /// <summary>指定包含連接字串的字串 ...
- MySQL计算销售员昨日各指标综合得分_20161206
数据需求如上,新增重激活以15天未下单为界定 SELECT d.销售员,(日销售额得分*0.6+日新增客户数得分*0.15+日客单价得分*0.1+日客户平均产品数得分*0.15)AS 综合得分,日销售 ...
- linux C学习笔记04--内存映射
内存映射代码,打开一个文件与映射到内存中,对内存和文件的修改都会反映到文件中来,反之亦然,先贴代码,以后再完善: /****************************************** ...