C++弱者ながらC++でNodeモジュールを作る事にしたのでいろいろと。
まずは公式サイトの解説を参考にしてみる。
まずは公式サイトの解説を参考にしてみる。
Addons Node.js v0.6.12 Manual & Documentationl
http://nodejs.org/docs/latest/api/addons.html
http://nodejs.org/docs/latest/api/addons.html
Hello World
最初にHello Worldのコードが載っているが1 | using namespace v8; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <node.h> #include <v8.h> v8::Handle<v8::Value> Method( const v8::Arguments& args) { v8::HandleScope scope; return scope.Close(v8::String::New( "world" )); } void init(v8::Handle<v8::Object> target) { target->Set(v8::String::NewSymbol( "hello" ), v8::FunctionTemplate::New(Method)->GetFunction()); } NODE_MODULE(hello, init) |
NODE_MODULEマクロがどこで定義されているかを探すと node.h で定義されている。
1 2 3 4 5 6 7 8 9 | #define NODE_MODULE(modname, regfunc) \ extern "C" { \ NODE_MODULE_EXPORT node::node_module_struct modname ## _module = \ { \ NODE_STANDARD_MODULE_STUFF, \ regfunc, \ NODE_STRINGIFY(modname) \ }; \ } |
ビルド
次にモジュールをビルドするためのwscriptのコードが載っている。ビルドするにはwscriptを作ってnode-wafコマンドを使う。
node-wafはpythonのビルドツールのhttp://docs.waf.googlecode.com/git/apidocs_16/index.htmlそのものと書いてある。rubyにおけるrakeコマンドとRakefileみたいな物なのかな。例として載っている
node-waf configure buildはconfigureタスクの後にbuildタスクを実行する。
wscriptの1行目
srcdir = '.'を適当に変えてソースディレクトリを指すようにしたら、何故かソースが読み込まれない。WAFのドキュメントにもsrcdirは載っていないので、wscriptはソースディレクトリに配置して使うしか無いのかも。
続きます Node.jsのモジュールをC++で書く (引数と戻り値)