以前の JScript エンジン (CLSID_JScript) でしばらくの間、ブラウザー拡張機能 (BHO) でアクティブ スクリプトを使用してきましたが、最近、新しい IE9 スクリプト エンジン (Chakra) もサポートすることにしました。私たちが行うことの 1 つは、独自のモジュール (名前空間) を作成するオプションを使用AddNamedItem
してエンジンにシンボルを追加することです。SCRIPTITEM_CODEONLY
残念ながら、これを Chakra で動作させることはできませんでした。シンボルを追加してすぐにそのスクリプト ディスパッチを取得する最も単純な例でさえ、E_OUTOFMEMORY
エラーが発生します。
if (SUCCEEDED(hr)) {
hr = scriptEngine->AddNamedItem(L"test", SCRIPTITEM_CODEONLY);
}
if (SUCCEEDED(hr)) {
hr = scriptEngine->GetScriptDispatch(L"test", &scriptDispatch);
}
GetScriptDispatch
呼び出しはエラーを返します。例全体は Github で見ることができます。
すべてのメソッドにブレークポイントを設定しましたが、呼び出されるのはとIActiveScriptSite
だけなので、サイトの実装が問題だとは思わないでください。GetLCID
OnStateChange
私は見つけることができるすべての例を見て、エンジンの状態をSCRIPTSTATE_CONNECTED
手動で設定すること、QI対象の追加のインターフェースを実装することなど、考えられるすべてを試しましたLCID
。何も違いはないようです。
何が与えられますか?この基本的な例は Chakra で機能すると思います。