最近開始搞畢設了,打算用本身拿手的js來搞,可是彷彿入坑了,Node還不是很熟。總之,兵來將擋,水來土掩嘛,帶着問題學習纔是最高效的。html
剛開始,雖然我老師把dll文件給我了,可是我一直覺得是用Node調用C++,而後一直在折騰怎麼編寫addon,怎麼將C++編譯而後用Node調用,未果。。。T_T,還差點在stackoverflow上提問了。。node
中途遇到個傳參的問題,還搜了好多資料,解決方案:v8 string to char*python
可是,再怎麼說,也折騰過了,對照着《深刻淺出Node.js》中的模塊部分,仍是理解了很多的。要想走得更遠,前面的路是少不了的。git
好噠,把步驟寫一下吧:web
1. 須要 node-gyp
模塊npm
$ npm install node-gyp -g
2. 安裝 python
環境api
官網函數
注意: 根據 node-gyp 的GitHub顯示,請務必保證你的 python 版本介於 2.5.0 和 3.0.0 之間。學習
3. 寫文件ui
具體內容請參考 Node.js調用C/C++
注意:網上搜集的有些博文時間有些久,node 的寫法在變,比較老的寫法可能會報錯,因此,最好去看官網上的例子,如 Hello World例子--官網
4. 編譯
$ node-gyp configure $ node-gyp build
node-gyp configure
命令生成適用於當前平臺的構建文件,同時會在 build 目錄下生成一個適用於 UNIX 平臺的 Makefile 或者適用於 Windows 平臺的 vcxproj 文件。調用
node-gyp build
命令會在 build/Release/ 目錄下編譯生成 addon.node 文件。
5. 運行
$ node test.js
6. 入門例子
6. 參考
忽然驚覺在 C++ 裏調用的是動態連接庫dll裏面的函數,原來努力方向錯了,並且並不須要那麼複雜,編譯之類的,用VS最噁心的是還得配置各類庫,如 boost,我還真是夠有耐心的。。。
所以,Google搜索:nodejs調用dll
☛ 步驟以下:
首先參考 Node 調用 C++ 中的環境配置,安裝 node-gyp 及 Python 環境
$ npm install node-gyp -g
安裝 python
環境:官網
注意: 根據 node-gyp 的GitHub顯示,請務必保證你的 python 版本介於 2.5.0 和 3.0.0 之間。
安裝 node-ffi
$ npm install ffi
☛ 實踐:
由於個人 dll 文件只暴露了一個 Query 方法,因此個人 query.js 文件以下:
// query.js var ffi = require('ffi'); var libm = new ffi.Library(__dirname + '/imagesearcherdll', { 'Query': [ 'string', ['string', 'string'] // 方法名:["返回值類型",["參數1類型","參數2類型"]] ] }); var sketchPath = './public/img/tmp.png', outputFile = 'result.txt'; libm.Query(sketchPath, outputFile);
最後,執行 node query.js
便可運行。
➹ 參考以下:
經過ffi在node.js中調用動態連接庫(.so/.dll文件)
而後又折騰了會,要不就是傳參錯了,或者路徑錯了,總之,這些都是小事兒啦,最後,終於成功了!!Node效率果真高!