node-webkit node.js c++扩展

node-webkit node.js c++扩展

原网址:http://blog.csdn.net/liujunpen/article/details/40633595
  18人阅读  评论(0)  收藏  举报

借鉴http://blog.csdn.net/haifengzhilian/article/details/26482529和http://ybxu-123.blog.163.com/blog/static/59473770201311315416334/的博客,

分享几个网站:

https://github.com/rogerwang/node-webkit/   node-webkit下载

http://nodejs.org/dist/   node.js下载


前几天,公司要使用node-webkit node.js 搞桌面应用但是,有大量数据操作耗内存,故想开发c++扩展,因为是第一次搞,弄了好几天,才搞定。 其实主要是版本对应问题,搞得好蛋疼。遂记录下来。

一、准备工作

1、下载node-v0.10.0-x86.msi,并安装

2、下载node-v0.10.0.tar并解压(我解压到e盘了)

3、装Python27(安装完后,在dos 下输入python 看是否添加到path中,若无,则将python安装路径添加到环境变量path中,并重启电脑。重启后再dos下输入python看是否有此命令。有了就ok)

二、正式开始

构建node扩展的方法:

方法一:

1、打开Windows命令行cmd.exe,进入E:\node-v0.10.0,执行vcbuild.bat release,会在当前目录下生产release目录中生成编译C/C++扩展的编译环境(包括头文件、库和可执行文件),其中知道到node.exe、node.lib等文件。如图:


2、制作编译安装批处理文件,此处命名为nodins.bat,文件内容如下:

<p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="lit" style="color: rgb(0, 102, 102);">@echo</span><span class="pln" style="color: rgb(0, 0, 0);"> off</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">if </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span><span class="pun" style="color: rgb(102, 102, 0);">==</span><span class="str" style="color: rgb(0, 136, 0);">""</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 136);">goto</span><span class="pln" style="color: rgb(0, 0, 0);"> help</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">mkdir </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">mkdir </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span><span class="pln" style="color: rgb(0, 0, 0);">\include</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">copy </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln" style="color: rgb(0, 0, 0);">y src\node</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">h </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span><span class="pln" style="color: rgb(0, 0, 0);">\include</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">copy </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln" style="color: rgb(0, 0, 0);">y src\node_object_wrap</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">h </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span><span class="pln" style="color: rgb(0, 0, 0);">\include</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">copy </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln" style="color: rgb(0, 0, 0);">y src\node_buffer</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">h </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span><span class="pln" style="color: rgb(0, 0, 0);">\include</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">copy </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln" style="color: rgb(0, 0, 0);">y src\node_version</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">h </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span><span class="pln" style="color: rgb(0, 0, 0);">\include</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">copy </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln" style="color: rgb(0, 0, 0);">y deps\v</span><span class="lit" style="color: rgb(0, 102, 102);">8</span><span class="pln" style="color: rgb(0, 0, 0);">\include\*</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">h </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span><span class="pln" style="color: rgb(0, 0, 0);">\include\</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">copy </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln" style="color: rgb(0, 0, 0);">y deps\uv\include\*</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">h </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span><span class="pln" style="color: rgb(0, 0, 0);">\include\</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">mkdir </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span><span class="pln" style="color: rgb(0, 0, 0);">\include\uv</span><span class="pun" style="color: rgb(102, 102, 0);">-</span><span class="pln" style="color: rgb(0, 0, 0);">private</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">copy </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln" style="color: rgb(0, 0, 0);">y deps\uv\include\uv</span><span class="pun" style="color: rgb(102, 102, 0);">-</span><span class="kwd" style="color: rgb(0, 0, 136);">private</span><span class="pln" style="color: rgb(0, 0, 0);">\*</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">h </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span><span class="pln" style="color: rgb(0, 0, 0);">\include\uv</span><span class="pun" style="color: rgb(102, 102, 0);">-</span><span class="pln" style="color: rgb(0, 0, 0);">private</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">mkdir </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span><span class="pln" style="color: rgb(0, 0, 0);">\include\ev</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">copy </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln" style="color: rgb(0, 0, 0);">y deps\uv\src\ev\*</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">h </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span><span class="pln" style="color: rgb(0, 0, 0);">\include\ev</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">mkdir </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span><span class="pln" style="color: rgb(0, 0, 0);">\include\c</span><span class="pun" style="color: rgb(102, 102, 0);">-</span><span class="pln" style="color: rgb(0, 0, 0);">ares</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">copy </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln" style="color: rgb(0, 0, 0);">y deps\uv\include\ares</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">h </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span><span class="pln" style="color: rgb(0, 0, 0);">\include\c</span><span class="pun" style="color: rgb(102, 102, 0);">-</span><span class="pln" style="color: rgb(0, 0, 0);">ares</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">copy </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln" style="color: rgb(0, 0, 0);">y deps\uv\include\ares_version</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">h </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span><span class="pln" style="color: rgb(0, 0, 0);">\include\c</span><span class="pun" style="color: rgb(102, 102, 0);">-</span><span class="pln" style="color: rgb(0, 0, 0);">ares</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">mkdir </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span><span class="pln" style="color: rgb(0, 0, 0);">\lib</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">copy </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln" style="color: rgb(0, 0, 0);">y </span><span class="typ" style="color: rgb(102, 0, 102);">Release</span><span class="pln" style="color: rgb(0, 0, 0);">\node</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">lib </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span><span class="pln" style="color: rgb(0, 0, 0);">\lib</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">copy </span><span class="pun" style="color: rgb(102, 102, 0);">/</span><span class="pln" style="color: rgb(0, 0, 0);">y </span><span class="typ" style="color: rgb(102, 0, 102);">Release</span><span class="pln" style="color: rgb(0, 0, 0);">\node</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">exe </span><span class="str" style="color: rgb(0, 136, 0);">"%1"</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">echo </span><span class="pun" style="color: rgb(102, 102, 0);">=================================</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">echo </span><span class="typ" style="color: rgb(102, 0, 102);">Install</span><span class="pln" style="color: rgb(0, 0, 0);"> succeefully</span><span class="pun" style="color: rgb(102, 102, 0);">!</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="kwd" style="color: rgb(0, 0, 136);">goto</span><span class="pln" style="color: rgb(0, 0, 0);"> exit</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">if </span><span class="kwd" style="color: rgb(0, 0, 136);">not</span><span class="pln" style="color: rgb(0, 0, 0);"> errorlevel </span><span class="lit" style="color: rgb(0, 102, 102);">0</span><span class="pln" style="color: rgb(0, 0, 0);"> echo </span><span class="typ" style="color: rgb(102, 0, 102);">Error</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="str" style="color: rgb(0, 136, 0);">"install-path"</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">&</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 136);">goto</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 136);">exit</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="pln" style="color: rgb(0, 0, 0);">help</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pln" style="color: rgb(0, 0, 0);">echo nodins</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">bat install</span><span class="pun" style="color: rgb(102, 102, 0);">-</span><span class="pln" style="color: rgb(0, 0, 0);">path</span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span style="margin: 0px; padding: 0px;"></span></span></p><p style="margin: 10px auto; padding-top: 0px; padding-bottom: 0px; font-family: 'Hiragino Sans GB W3', 'Hiragino Sans GB', Arial, Helvetica, simsun, 宋体; white-space: normal;"><span style="font-family: tahoma, arial, sans-serif; font-size: 14px; color: rgb(68, 68, 68);"><span class="pun" style="color: rgb(102, 102, 0);">:</span><span class="kwd" style="color: rgb(0, 0, 136);">exit</span></span></p>
3、打开Windows命令行cmd.exe,切换 进入e:\node-v0.10.0目录。将文件nodins.bat拷贝到e:\node-v0.10.0中,在命令行执行:nodins.bat   D:\nodejs_0_10_0,将需要的node.js的c++头文件和库 复制到e:\node-v0.10.0目录,方便vs(我使用的是vs2012)使用,内容如下:


4、用Visual Studio 2010创建一个DLL工程空白工程hellonode放在D:\目录下,新建项目—>win32控制台程序,创建lib空项目

5、在项目中创建 cpp 文件:

<p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"><span style="color: rgb(170, 170, 170); line-height: 20px; padding: 0px; margin: 0px; outline: none; font-family: Consolas, 微软雅黑; font-size: 14px; white-space: nowrap;"><span class="com" style="line-height: 24.5px; color: rgb(136, 0, 0);">//kkk.cpp</span></span><span style="color: rgb(57, 26, 26); line-height: 20px; padding: 0px; margin: 0px; outline: none; font-family: Consolas, 微软雅黑; font-size: 14px; white-space: nowrap;"><br style="line-height: 24.5px; padding: 0px; margin: 0px; outline: none;" /></span></p><p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"><span style="font-family: Consolas, 微软雅黑; color: rgb(0, 128, 128);"><span style="line-height: 20px; font-size: 14px; white-space: nowrap;"><span class="com" style="line-height: 24.5px; color: rgb(136, 0, 0);">#include</span><span class="pln" style="line-height: 24.5px; color: rgb(0, 0, 0);"> </span><span class="str" style="line-height: 24.5px; color: rgb(0, 136, 0);"><node.h></span></span></span></p><p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"><span style="font-family: Consolas, 微软雅黑; color: rgb(0, 128, 128);"><span style="line-height: 20px; font-size: 14px; white-space: nowrap;"><span class="com" style="line-height: 24.5px; color: rgb(136, 0, 0);">#include</span><span class="pln" style="line-height: 24.5px; color: rgb(0, 0, 0);"> </span><span class="str" style="line-height: 24.5px; color: rgb(0, 136, 0);"><iostream></span></span></span></p><p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"><span style="font-family: Consolas, 微软雅黑; color: rgb(0, 128, 128);"><span style="line-height: 20px; font-size: 14px; white-space: nowrap;"><br style="line-height: 24.5px;" /></span></span></p><p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"><span style="line-height: 20px; font-size: 14px; white-space: nowrap; color: rgb(0, 128, 128); font-family: Consolas, 微软雅黑;"><span class="kwd" style="line-height: 24.5px; color: rgb(0, 0, 136);">void</span><span class="pln" style="line-height: 24.5px; color: rgb(0, 0, 0);"> main</span><span class="pun" style="line-height: 24.5px; color: rgb(102, 102, 0);">(</span><span class="pln" style="line-height: 24.5px; color: rgb(0, 0, 0);">v8</span><span class="pun" style="line-height: 24.5px; color: rgb(102, 102, 0);">::</span><span class="typ" style="line-height: 24.5px; color: rgb(102, 0, 102);">Handle</span><span class="pun" style="line-height: 24.5px; color: rgb(102, 102, 0);"><</span><span class="pln" style="line-height: 24.5px; color: rgb(0, 0, 0);">v8</span><span class="pun" style="line-height: 24.5px; color: rgb(102, 102, 0);">::</span><span class="typ" style="line-height: 24.5px; color: rgb(102, 0, 102);">Object</span><span class="pun" style="line-height: 24.5px; color: rgb(102, 102, 0);">></span><span class="pln" style="line-height: 24.5px; color: rgb(0, 0, 0);"> exports</span><span class="pun" style="line-height: 24.5px; color: rgb(102, 102, 0);">){</span></span></p><p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"><span style="font-family: Consolas, 微软雅黑; color: rgb(0, 128, 128);"><span style="line-height: 20px; font-size: 14px; white-space: nowrap;"><span class="pln" style="line-height: 24.5px; color: rgb(0, 0, 0);">  std</span><span class="pun" style="line-height: 24.5px; color: rgb(102, 102, 0);">::</span><span class="pln" style="line-height: 24.5px; color: rgb(0, 0, 0);">cout</span><span class="pun" style="line-height: 24.5px; color: rgb(102, 102, 0);"><<</span><span class="str" style="line-height: 24.5px; color: rgb(0, 136, 0);">"Hello World"</span><span class="pun" style="line-height: 24.5px; color: rgb(102, 102, 0);"><<</span><span class="pln" style="line-height: 24.5px; color: rgb(0, 0, 0);">std</span><span class="pun" style="line-height: 24.5px; color: rgb(102, 102, 0);">::</span><span class="pln" style="line-height: 24.5px; color: rgb(0, 0, 0);">endl</span><span class="pun" style="line-height: 24.5px; color: rgb(102, 102, 0);">;</span></span></span></p><p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"><span style="font-family: Consolas, 微软雅黑; color: rgb(0, 128, 128);"><span style="line-height: 20px; font-size: 14px; white-space: nowrap;"><span class="pun" style="line-height: 24.5px; color: rgb(102, 102, 0);">}</span></span></span></p><p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"><span style="font-family: Consolas, 微软雅黑; color: rgb(0, 128, 128);"><span style="line-height: 20px; font-size: 14px; white-space: nowrap;"><br style="line-height: 24.5px;" /></span></span></p><p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"><span style="font-family: Consolas, 微软雅黑; color: rgb(0, 128, 128);"><span style="line-height: 20px; font-size: 14px; white-space: nowrap;"><span class="pln" style="line-height: 24.5px; color: rgb(0, 0, 0);">NODE_MODULE</span><span class="pun" style="line-height: 24.5px; color: rgb(102, 102, 0);">(</span><span class="pln" style="line-height: 24.5px; color: rgb(0, 0, 0);">kkk</span><span class="pun" style="line-height: 24.5px; color: rgb(102, 102, 0);">,</span><span class="pln" style="line-height: 24.5px; color: rgb(0, 0, 0);">main</span><span class="pun" style="line-height: 24.5px; color: rgb(102, 102, 0);">)</span></span></span></p>

或者(下面这个是 我有次用vs编译时,每次都提示有问题,后来发现是 NODE_SET_METHOD有问题,少库,也没办法,后来在我笔记本重装环境,编译就可以了)

#define BUILDING_NODE_EXTENSION
#include <node.h>

using namespace v8;

Handle<Value> Hello(const Arguments& args) {
HandleScope scope;
return scope.Close(String::New("Hello world!"));

}


void init(Handle<Object> target) {
NODE_SET_METHOD(target, "hello", Hello);
}

NODE_MODULE(hellonode, init)

(下面是添加我们上面整体的头文件和lib库了)

6、在工程属性的配置属性-常规中将目标文件扩展名改为.node; 
7、在工程属性的配置属性-C/C++-常规-附加包含目录添加头文件目录为:D:\nodejs_0_10_0\include 
8、在工程属性的配置属性-链接器-常规-附加库目录添加目录:D:\nodejs_0_10_0\lib 
9、在工程属性的配置属性-链接器-输入-附加依赖项添加lib库:node.lib 

10、编译生成后在release(release 版)目录中生成一个文件 hellonode .node(文件名必须和上面NODE_MODULE(hellonode, init)中的模块名相同,否则找不到);

11、在目录创建js测试代码test.js,代码如下

var addons = require('./hellonode');
console.log('C/C++ addons.hello() =', addons.hello());

方法二:

2,安装node-gyp, npm install -g node-gyp

3,构建 hellonode工程


4、dos下进入hellonode文件的目录下(cd  C:\Projects\hellonode)

5、在当前目录下编写binding.gyp文件

6、node-gyp configure

node-gyp build


构建node-webkit扩展的方法:
1,安装node.js 版本为node-v0.10.0-x86.msi
2,安装nw-gyp, npm install -g  nw-gyp
3,构建 hellonode工程


就是一个hellonode的c++文件。代码为
#define BUILDING_NODE_EXTENSION
#include <node.h>

using namespace v8;

Handle<Value> Hello(const Arguments& args) {
HandleScope scope;
return scope.Close(String::New("Hello world!"));
}

void init(Handle<Object> target) {
NODE_SET_METHOD(target, "hello", Hello);
}
NODE_MODULE(hellonode, init)

4、 dos下进入 hellonode文件的目录下(cd  C:\Projects\hellonode)
5、{
'targets': [
{
'target_name': 'hellonode',
'sources': [ 'hellonode.cc' ]
}
]
}

6、nw-gyp configure --target=0.8.4

{

0.8.6为node-webkit的版本。。。

}

nw-gyp build


结果展示:




总结:因为第一次做,所以走了好多弯路,有这个几个问题:

1、老板说是node.js的c++扩展,所以我们用vs和node-gyp编译的话,用node.exe可以启动使用,但是在node-webkit中使用不了。而且不知道vs编译和node-gyp编译是否一样

2、网上说node.js和node-webkit版本要一致,故我们的node-webkit是0.8.6的版本,所以我下了0.8.6的node.js来匹配,提示Modular不一致,后来在https://github.com/rogerwang/node-webkit/中看了下,这个版本的node-webkit支持0.10.0的node.js,坑啊

3、用node.js的编译方法编译后的xx.node,在node-webkit中使用不了,会崩掉

4、上面node-webkit编译c++时,0.8.4会以为是node.js的版本,所以也是报错,后来看了下它的编译信息,发现是连接的node-webkit的地址,说以那个其实是0.10.0node-webkit的版本。

在整个探索中,我个人和同事反复摸索,碰到了以上的几个问题。希望对大家有帮助。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值