本記事は、JavaScript Advent Calendar 2011 (オレ標準コース)の14日目の記事です。


Windowsに付属するJavaScriptエンジンとしてJScript.dllがあります(いやJScriptと名乗っていますけど)。

Internet Explorer(8まで)などが使っているほか、APIが公開されており自分のアプリケーションからも呼び出せるのはご存じと思います。そのやり方はググればいくらでも例が見つかりますので、今日はその話ではありません。

JScript.dllは、いくつかバージョンがありますが最新は5.8です。しかし、5.8には5.7互換モードがあり、自アプリケーションでJScript.dllをホストする場合、デフォルトでは5.7モードで動いてしまうのです(IE8をインストールしても、IEコンポーネントはIE7互換モードで動いてしまうのと似た話ですね)。

というわけで、5.8で動かすには5.8モードにする指定が必要です。

IActiveScriptPtr js(L"JScript");
IActiveScriptPropertyPtr jsProperty(js);
 
_variant_t v(implicit_cast<long>(SCRIPTLANGUAGEVERSION_5_8), VT_I4); // ATL::CComVarinatでも可。
auto hr = jsProperty->SetProperty(SCRIPTPROP_INVOKEVERSIONING, nullptr, &v);

やっておいて損はないので、JScript.dllを自アプリに組み込もうという場合は忘れずにやっておきましょう。

サンプルのプログラムです: JScript5.8.cpp。Visual C++ 2010とWindows SDK 7.1を使ってコンパイル・実行しました。ATLは使っていないので、Visual C++ Expressでもコンパイルできるはずです。

スポンサード リンク

この記事のカテゴリ

  • ⇒ JScript 5.8をJScript 5.8モードで動かす
  • ⇒ JScript 5.8をJScript 5.8モードで動かす
  • ⇒ JScript 5.8をJScript 5.8モードで動かす
  • ⇒ JScript 5.8をJScript 5.8モードで動かす