最近要写一个addon插件,所以。。。。

准备材料:1.安装python;2.安装开发包(http://nodejs.cn/download/);3.安装vscode(windows版本)/ xcode(MAC版本)

我是在windows下开发,选择vscode。下面的经历都是windows版本,其他系统的忽略

现在网上的材料大部分不适用于新版的node.js。举个例子:新版的参数多了一个v8::Local<v8::Context> context,很多转换都要用到。以前可以直接args[0]->ToString();现在是不允许了。

安装好上述3件宝,将下载的hello范例拉到vscode上,选择nan版本,右键“在继承终端模式打开”,输入(1)>>>npm init

然后(2)>>>npm install nan

(3)>>>npm install node-gyp -g

(4)>>>node-gyp configure

(5)>>>node-gyp build

之后的debug可以选择>>>node-gyp rebuild 取代(5),最后调试>>>node hello.js

上述的hello可以在http://nodejs.cn/api/addons.html看到详细的介绍,我不细说。

搭建好调试环境,接下来就是开动addon定制了。

我这个插件需要调用外部已经写好的DLL,所以要先SetDLLPath(用到windows API "SetDllDirectory"&"GetModuleHandle"&"LoadLibrary"等),网上一堆类似的教程,我不赘述了。js调用可能是

var buf=Buffer.alloc(2048);

buf.write(__dirname+'/dll_path')

addon.jSetDllPath(Object(buf), buf.length)

C++函数SetDLLPath:

void SetDLLPath_C(const Nan::FunctionCallbackInfo<v8::Value>& info)

{

Isolate* isolate = info.GetIsolate();

v8::Local<v8::Context> context = isolate->GetCurrentContext();

Local<Object> out=Local<Object>::Cast(info[0]);    //直接Buffer类型就Object

unsigned char *ss = (unsigned char *)node::Buffer::Data(out);

//处理传递的字符串

double arg1 = info[1]->NumberValue(context).FromJust();  //Buffer的大小

//...后面的省略

}

void Init(v8::Local<v8::Object> exports) {

v8::Local<v8::Context> context = exports->CreationContext();

exports->Set(context,

Nan::New("SetDLLPath").ToLocalChecked(),

Nan::New<v8::FunctionTemplate>(SetDLLPath_C)->GetFunction(context).ToLocalChecked());

}

NODE_MODULE(addon, Init)

这样就完成一个函数的对接。我只学Buffer和Number的传递,其他的String之类的完全摸不到边,工程时间急先这样做了。

上述的代码可以看出,js调用的实际上是暴露的接口字符串,和C的函数接口没啥关系,不过我们习惯写法都是将它们统一的(方便复制粘贴^_^)。同时也看出了新版的Buffer转换其实比旧版的要简单,但是Number转换时需要参数content,所谓的上下文。String也是和Number类似的,只不过缓存UTF8有点问题,我还在研究中。。。。

好了,暂时就这么多!

addon@Node.js之新手上路相关推荐

  1. Node.js 之 新手安装详解 及 npm 配置说明

    简介   Node.js 是一个基于Chrome V8 的 JavaScript运行时的平台,可轻松构建快速,可扩展的网络应用程序. Node.js使用事件驱动的非阻塞I/O模型,使其轻量级和高效,非 ...

  2. 使用napi node_使用Napi / node-addon-api和Cmake的独立于Node.js版本的C ++ Native Addon

    使用napi node This is a tutorial for c++ Node-addon-api / Napi addon using cmake.Napi makes it indepen ...

  3. 如何将命令行参数传递给Node.js程序?

    我有一个用Node.js编写的Web服务器,我想使用一个特定的文件夹启动. 我不确定如何在JavaScript中访问参数. 我正在像这样运行节点: $ node server.js folder 这是 ...

  4. 如何调试Node.js应用程序?

    如何调试Node.js服务器应用程序? 现在,我主要使用带有以下打印语句的警报调试 : sys.puts(sys.inspect(someVariable)); 必须有更好的调试方法. 我知道Goog ...

  5. 如何让服务器运行js,服务器端JavaScript运行环境Node.js的依赖性管理

    众所周知,Node.js是一个基于Chrome V8引擎的服务器端JavaScript运行环境.它采用了一种事件驱动的.非阻塞式的I/O模式,运行起来既轻量级又高效.诚然,我们可以使用单个js文件,来 ...

  6. node mysql await_javascript – node.js async / await与MySQL一起使...

    我需要将所有结果同步并附加到带有async / await关键字的字符串,例如c# 我是node.js的新手,我无法将这种新语法适应我的代码. var string1 = ''; var string ...

  7. Node.js:入门资料

    <快速搭建 Node.js 开发环境以及加速 npm> http://fengmk2.com/blog/2014/03/node-env-and-faster-npm.html <N ...

  8. Node.js module.exports与导出

    by lazlojuly 通过lazlojuly Node.js module.exports与导出 (Node.js module.exports vs. exports) 它们是什么,如何使用它们 ...

  9. 学习 Node.js 的 6 个步骤

    学习 Node.js 的 6 个步骤 从刚接触Node.js到现在,自己也是一路摸滚打爬过来的,虽不说是什么高手,但对于如何学习Node.js,还是有一些个人见解,拿出来与大家共勉~ 学习Node.j ...

最新文章

  1. 美国爱因斯坦计划技术分析
  2. redirect_uri参数错误解决方法
  3. 洛谷 P4245 【模板】任意模数NTT
  4. 不用 pip install,你养我吗?
  5. Docker与Kubernetes,是敌是友?
  6. 好的重构方法才能摆脱“屎山”
  7. 调试利器:浏览器 Logger
  8. samba安装_Centos安装Samba
  9. wordpress+lnmp出现 404 Not Found nginx
  10. 360浏览器清除缓存_手机微信内置浏览器缓存清理指南
  11. 前大厂员工谈中美企业区别,中企不用单元测试,仅靠QA检查代码?
  12. 1486mysql,mysql_error.md
  13. 基于.net平台的Windows窗体应用程序——(已附源码)学生管理系统
  14. JavaScript常见的网页特效(元素样式相关属性)
  15. sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  16. 小程序项目之猫眼案例-代码
  17. linux运算圆周率代码,计算圆周率pi的代码
  18. CSS3 2D转换3D转换
  19. 黑客基础——基础隐写术
  20. 服务器的垃圾清扫系统指令,求win10清除系统垃圾的几个命令

热门文章

  1. 如何调整DOSBOX的运行窗口大小
  2. 国产操作系统突破重围,中兴新支点系统宣布:30万+,并发布服务器模式
  3. 软件设计分为前端后端吗
  4. WinSvr:在 Windows Server 中启用无线连接
  5. 计算机bios设置系统安装教程,z590主板装win7系统及bios设置教程(支持11代cpu驱动)...
  6. python主题更改_IDLE怎么将主题修改成Darcula样式?
  7. 中国电商靠低价攻入美国市场,亚马逊已经手足无措
  8. 2022中国开发者影响力年度榜单揭晓,华为、阿里、腾讯等入选年度开源贡献企业 | 美通社头条...
  9. 核桃编程python下载_核桃编程for Mac
  10. Visual Assist 10.9.2248 破解版(支持VS2017)