Node調用C++(dll)

最近開始搞畢設了,打算用本身拿手的js來搞,可是彷彿入坑了,Node還不是很熟。總之,兵來將擋,水來土掩嘛,帶着問題學習纔是最高效的。html


折騰1:Node 調用 C++

剛開始,雖然我老師把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

  • binding.gyp
  • test.cc
  • test.js

具體內容請參考 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. 入門例子

Node.js調用C/C++

Hello World例子--官網

6. 參考

Nodejs 6.x 中文文檔

Node.js v7.2.1 Documentation

Node.js 和 C++ 之間的類型轉換

Javascript裏有個C:Part 1 - 基礎


折騰2:Node 調用 dll

忽然驚覺在 C++ 裏調用的是動態連接庫dll裏面的函數,原來努力方向錯了,並且並不須要那麼複雜,編譯之類的,用VS最噁心的是還得配置各類庫,如 boost,我還真是夠有耐心的。。。

所以,Google搜索:nodejs調用dll

☛ 步驟以下:

  1. 首先參考 Node 調用 C++ 中的環境配置,安裝 node-gyp 及 Python 環境

    $ npm install node-gyp -g

    安裝 python 環境:官網

    注意: 根據 node-gyp 的GitHub顯示,請務必保證你的 python 版本介於 2.5.0 和 3.0.0 之間。

  2. 安裝 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文件)

nodejs調用dll/so文件的方法

而後又折騰了會,要不就是傳參錯了,或者路徑錯了,總之,這些都是小事兒啦,最後,終於成功了!!Node效率果真高!

相關文章
相關標籤/搜索