当前位置: 首页 > 编程笔记 >

node.js调用C++开发的模块实例

齐向笛
2023-03-14
本文向大家介绍node.js调用C++开发的模块实例,包括了node.js调用C++开发的模块实例的使用技巧和注意事项,需要的朋友参考一下

如何用C++和node交互,在node的程序中,如果有大数据量的计算,处理起来比较慢,可以用C++来处理,然后通过回调(callback的形式),返回给node。先回顾一下正统的用 C++ 开发 native 模块的方法

#include <node.h> 
#include <v8.h> 
using namespace v8; 
 
// 这里是 hello 函数的 C++ 实现部分 
Handle<Value> Method(const Arguments& args) { 
 HandleScope scope; 
 return scope.Close(String::New("world")); 
} 
 
// 这里是模块的初始化函数,必须有 
void init(Handle<Object> exports) { 
 exports->Set(String::NewSymbol("hello"), 
   FunctionTemplate::New(Method)->GetFunction()); 
} 
 
// 这里定义本模块的名字和初始化函数 
NODE_MODULE(hello, init)

这个模块用Node 写的话,是这样的:

exports.hello = function() { 
 return 'world'; 
};


为了编译 C++ 这个模块,还需要一个 JSON 格式的 binding.gyp 文件,来定义编译的细节。 
{ 
 "targets": [ 
  { 
   "target_name": "hello", 
   "sources": [ "hello.cpp" ] 
  } 
 ] 
}

执行 node-gyp configure build  就直接编译了。

node test.js: 
var addon = require('./build/Release/hello'); 

console.log(addon.hello()); 

 就输出结果。

如此node就可以直接调用C++编写的程序。

对上面程序的解释:在hello.cc 中,我们首先创建了一个函数Method, 此函数返回一个"hello,world"的字符串,后面我们又创建了一个init的函数,作为一个初始化函数,我们去调用了一个函数

最后面,我们将这个模块绑定为:NODE_MODULE(hello, init)

在官网中指出,所有的node的插件必须输出一个初始化的函数,也就是说如下代码是在每个模块都必须有的,固定格式。

void Initialize (Handle<Object> exports); 
NODE_MODULE(module_name, Initialize) 

其中 module_name 必须对应上binding.gyp中的 target_name 就可以了。

经过了node-gyp configure build 编译以后会在当前文件下生成一个build 的新的文件夹。我们通过在test.js中去引用这个build的结果,就可以调用C++的写的程序了。

 类似资料:
  • 本文向大家介绍用C/C++来实现 Node.js 的模块(二),包括了用C/C++来实现 Node.js 的模块(二)的使用技巧和注意事项,需要的朋友参考一下 温故而知新,可以为湿矣   首先请大家记住这个 V8 的在线手册——http://izs.me/v8-docs/main.html。   还记得上次的 building.gyp 文件吗?    就像这样,举一反三,如果多几个 *.cc 文件

  • 本文向大家介绍用C/C++来实现 Node.js 的模块(一),包括了用C/C++来实现 Node.js 的模块(一)的使用技巧和注意事项,需要的朋友参考一下  N久之前的一个坑——用 Node.js 来重构 NBUT 的 Online Judge,包括评测端也得重构一遍。(至于什么时候完成大家就不要关心了,(/‵Д′)/~ ╧╧   总之我们现在要做的其实简而言之就是——用C/C++来实现 No

  • 本文向大家介绍C#调用WebService实例开发,包括了C#调用WebService实例开发的使用技巧和注意事项,需要的朋友参考一下 一、基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明

  • 本书可以作为Node.js开发加密货币的入门书籍(正式出版可能使用《Node.js区块链开发》),也可以作为亿书(及以Crypti为核心的应用Lisk)的官方开发文档。

  • 本文向大家介绍C#调用Python模块的方法,包括了C#调用Python模块的方法的使用技巧和注意事项,需要的朋友参考一下   当下,C#与Python都是比较热门的计算机编程语言,他们各有优缺点,如果能让他们互相配合工作,那是多么美好的事情,今天我来讲解一下如何利用C#来调用Python。   如果让C#支持调用Python模块,我们首先需要安装一些扩展,这里推荐使用IronPython库。 第

  • 本文向大家介绍Node.js Domain 模块实例详解,包括了Node.js Domain 模块实例详解的使用技巧和注意事项,需要的朋友参考一下 Node.js Domain(域) 简化异步代码的异常处理,可以捕捉处理try catch无法捕捉的异常。 Domain 模块可分为隐式绑定和显式绑定: 隐式绑定: 把在domain上下文中定义的变量,自动绑定到domain对象 显式绑定: 把不是在d