这段时间,一直在处理一个问题。node.js调用dll(c++),用到了ffi,ref,ref-struct模块,在node v0.10.22版本下运行正常,但高版本node下会出错(经测试,0.12.x往上就不好使了):
Error: The specified procedure could not be found.
高版本node下重新编译ffi等模块也均告失败,会报出一大堆语法错误之后:
gyp ERR! build error gyp ERR! stack Error: `C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe` failed with exit c ode: 1 gyp ERR! stack at ChildProcess.onExit (E:\tools\nvmw\v5.5.0\node_modules\node-gyp\lib\build.js:2 76:23) gyp ERR! stack at emitTwo (events.js:87:13) gyp ERR! stack at ChildProcess.emit (events.js:172:7) gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12) gyp ERR! System Windows_NT 6.1.7601 gyp ERR! command "E:\\tools\\nvmw\\v5.5.0\\node.exe" "E:\\tools\\nvmw\\v5.5.0\\node_modules\\node-gy p\\bin\\node-gyp.js" "rebuild" gyp ERR! cwd D:\phpStudy\WWW\res2\badaling\client\ticketStorage\node_modules\ffi gyp ERR! node -v v5.3.0 gyp ERR! node-gyp -v v3.3.1 gyp ERR! not ok
万般无奈之下,想到同时运行两个不同版本的node.js。于是用到了nvmw。
nvmw下载地址:http://pan.baidu.com/s/1xdmf3, 直接解压缩就行,比如解压到D:\nvmw文件夹中,将D:\nvmw\nvmw.bat添加到系统环境变量中,以便可以到处运行nvmw命令。
然而问题又来了,nvmw用法如下:
Usage: nvmw help Show this message nvmw install [version] Download and install a [version] nvmw uninstall [version] Uninstall a [version] nvmw use [version] Modify PATH to use [version] nvmw ls List installed versions Example: nvmw install v0.6.0 Install a specific version number nvmw use v0.6.0 Use the specific version
但是运行安装命令时,由于国外源的问题,一直安装失败,我换了淘宝的源后也是一直失败。但是,根源无非是得到不同版本的node.exe。我们可以在淘宝源路径上(https://npm.taobao.org/mirrors/node/)手动下载对应版本的node.exe,然后放到D:\nvmw文件夹中,不同版本文件夹。
nvmw v0.10.22 node.exe v5.3.0 node.exe
如上安装了两个版本的node,运行nvmw ls:
C:\Users\Administrator>nvmw ls v0.10.22 v5.3.0 Current: none
然后就可以按nvmw命令正常使用了,至此就可以在一台电脑上跑多个node.js版本的程序了!
ps:用以上模块调dll难免会遇到各种各样的问题,毕竟是第三方模块,作者如果后期不进行维护,很难保证在新版本node上好使。nodejs调用dll动态库还可以通过写addon来实现,但是所调用的dll涉及到结构体,较难处理,以及本人c++水平有限,还是没能深入研究。
时间: 2024-10-25 02:45:13