Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8697

node-addon-apiについて

$
0
0

Node-addon-api について

node.jsから、CやC++のAPIを直接実行するためには、
N-APIを使用することになるが、非常に複雑で、コーディングが面倒になるので、
C++でN-APIをラップしたnode-addon-apiを使用したほうが良い。

ただ、Javascriptの知識と、C++の知識(メモリ管理等)が必要となりますが、
基本的に細かい制御はクラスライブラリがやってくれるので、
実装に集中できます。

ビルド方法

package.jsonの準備

まずは、package.json を準備する。
bindingsとnode-addon-apiをインストールします。

npm init # 初期設定
npm install bindings node-addon-api

binding.gypファイル

binding.gypファイルを作成して、C++のビルト環境を作成します。

{"targets":[{"target_name":"hello","cflags!":["-fno-exceptions"],"cflags_cc!":["-fno-exceptions"],"sources":["hello.cpp"],"include_dirs":["<!@(node -p \"require('node-addon-api').include\")"],'defines':['NAPI_DISABLE_CPP_EXCEPTIONS'],}]}

hellow.cpp

cpp ファイルを作成します。

#include <napi.h>
Napi::StringMethod(constNapi::CallbackInfo&info){Napi::Envenv=info.Env();returnNapi::String::New(env,"world");}Napi::ObjectInit(Napi::Envenv,Napi::Objectexports){exports.Set(Napi::String::New(env,"hello"),Napi::Function::New(env,Method));returnexports;}NODE_API_MODULE(hello,Init)

C++の説明

NODE_API_MODULE(hello, Init)

javascriptとの接続するためのマクロ
Init 関数内でエクスポートするファンクションを定義する。
exports.SetでhelloというjavascriptのメソッドをMethodというC++関数に割り当てている。

Method関数内で、worldという文字列を返している。

hello.js

varaddon=require('bindings')('hello');console.log(addon.hello());// 'world'

bindingsモジュールをロードして,
helloを呼び出します。

ビルド

npm install

を実行すると、C++のコンパイラが実行され、ビルドされます。

実行

node hello.js

を実行するとworldという文字列が表示されると思います。

終わりに

以下の例は、ほぼ node-addon-apiのサンプルを元にしました。

https://github.com/fore-vision/node-addon-api 
上にサンプルとドキュメントがあるので、色々できると思います。


Viewing all articles
Browse latest Browse all 8697

Trending Articles