JavaScriptをC++からのスクリプトとして使う

前回にV8エンジンのライブラリビルドまで終わっているとして、今回はそのライブラリを用いて自分のC++プログラムからJavaScriptを実行させている風にします。

VisualStudio 2010を開いて、コンソールアプリケーションを1つ準備します。
そして、V8エンジンをビルドしてある場所を設定しておきます。

  • 追加のインクルードディレクトリ: testV8/v8/include
  • 追加のライブラリディレクトリ: testV8/v8/build/Debug(もしくはRelease)/lib

また、プロジェクトのコード生成は”マルチスレッドデバッグ(/MD)”や”マルチスレッド(/MT)”を設定しておきます。ここはV8エンジンのビルドで設定されているものに合わせておくことが必要です。

そして、下記のような簡単なプログラムを入力してビルドしてみます。
(基本的には https://developers.google.com/v8/get_startedにあるHello Worldのプログラムです)

実行すると、コンソール出力に Hello,Worldが表示されます。

JavaScriptからC++側に用意した関数を呼び出す

次にJavaScriptからC++側に用意した関数を呼び出してみます。
C++で関数を作り、エンジンのObjectTemplateを生成し、そこに関数を登録します。
このObjectTemplateを受け継ぐ形でコンテキストを生成したら、スクリプトで関数を呼べるようになるようです。

ソースコードは以下のようになります。

ちなみに上記のPlusMethodでは文字列来たときにはまずいため、以下のように変更もしてみました。これだと文字列の時には結合して結果が出るようになります。

C++側からJavaScriptに定義してある関数を呼び出す

今度は今までの逆にJavaScript側で定義される関数をC++側から呼び出してみます。
手順としては、JavaScript側で定義されている関数のポインタみたいなものを取り出してきて、そこに引数を準備して呼び出す形で行います。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする