Kuroda Software Service
ハイブリッドコーディング
  [サイトマップ]

コンテンツ内メニュー

表示モード 全項表示  部分表示



マークの色と認証の関係

一般公開

無料認証

購入認証


認証についての説明

無料アカウント作成フォーム

有料ページ購入フォーム


ほかのコンテンツトップページ

ハイブリッドコーディング

JSC環境でWSH向けコードを開発する場合に必要な工夫です。

● 混在環境コーディングの目的

 

/fast-オプションを使わない限りWSH環境向けスクリプトをJSC環境で開発デバッグすることは不可能です。しかも両環境の差異をコードで吸収する必要がありますが、それでも両環境で動くソースは大変魅力的です。同一のソースをHTML、HTA中のスクリプトとして、単独のJSとして、必要があればEXEコンパイルして使用できれば極めて汎用なライブラリとなるからです。

 

● WSHとJSC環境差異の吸収

 

WSH環境向けJSコードをJSC環境で開発デバッグしようとするとJSC環境にはWScriptを出現される手立てが無いことに気づきます。そもそもWScriptはWSH環境で実行中のスクリプトに提供される内向きのCOMオブジェクトなので、レジストリにCLSID登録されていません。wscript.exe、cscript.exeをバイナリレベルで眺めるとExportされた無名関数がひとつ存在し、これをHackするとインスタンスを生成できるかも知れませんが今のところ成功していません。

 

この問題に対する解決策は2つ考えられます。

 

1.両環境に依存しない新たなオブジェクトで置き換える。

 

2.両環境を条件コンパイルで切り分けたコーディングをする。



● 独自コンソールオブジェクト

 

両環境に依存しない例として文字列のコンソール入出力を新たなオブジェクトを設計することによって行います。

 

WScript.Shellは両環境で使える。

Execで子プロセスの標準入出力を補足できる。

親プロセスは子として起動すべきJSファイルが存在しない場合新たにファイルを生成して起動する。

子プロセスは標準入出力とコンソール入出力を担当し標準入力が存在しない場合(親プロセスの終了)ループ離脱し終了する。

● プログラム起動引数

 

条件コンパイルで切り分けた例としてプログラム起動引数の取得を設計します。WScript.ArgumentsコレクションとSystem.Environment.CommandLineを同名変数でラップします。

 

@_jscript_versionは.NET環境で7以上の数値を返す。

importステートメントを使わずに.NETクラスを参照する。

両環境向けの同名関数、変数を@if...@else...@endで記述する。

 

お問い合わせ
©クロダ ソフトウェア サービス programmed by hidebou