タブファイラー開発ブログ

Tablacus ExplorerやX-Finderの作者のブログ

64ビット環境でスクリプトを実行する

64ビットネイティブ環境ではScriptControlが使用できません。代わりに以下の方法があります。 1.IEコンポーネントを使用 htmlを表示するIEコンポーネントスクリプトタグを使用すれば、スクリプトが実行できます。 メリットはIEの機能(alertやprompt等)が使用できます。また、IE9以降の場合はChakraという高速なスクリプトエンジンを使用できます。 デメリットはIEコンポーネントの分だけ重くなります。 2.htmlfile (CLSID_HTMLDocument)を使用 上記のIEコンポーネントのhtml解析の部分を取り出した感じです。これもIE9以降の場合はChakraという高速なスクリプトエンジンを使用できます。 IE11からは標準化の流れでwindow.execScriptが廃止されているので注意。 3.IActiveScriptを使用 ScriptControlの内部で使っていると思われるIAcriveScriptで直接実行させることもできます。この方法は上記の2つの方法より細かい指定ができます。 ScriptControl.LanguageはCLSIDFromProgIDで言語名からCLSIDを作成し、CoCreateInstanceでIActiveScriptを作成します。Chakraという高速なスクリプトエンジンを使用する場合はCLSIDFromProgIDで無くChakraのCLSIDを用意する必要があります。 ScriptControl.AddCodeはIAcriveScriptSite::GetItemInfoをpstrNameに追加するオブジェクト名が来た際にppiunkItemにオブジェクトを返すように実装し、IActiveScript->AddNamedItemでオブジェクト名を通知します。 ScriptControl.AddCodeはIActiveScriptParseをIActiveScriptからQueryInterfaceして、ParseScriptTextします。 詳しくはTablacus Exploerのソースをご覧ください。 2番目のCLSID_HTMLDocumentはコメントになっていますが、3つの方法ともあります。