artonです。

On Sun, 10 Feb 2002 00:46:59 +0900
KANEKO Naoshi <wbs01621 / mail.wbs.ne.jp> wrote:

> 金子です。
> 
> 最近 Windows Script Control の存在を知りました。
> なかなか面白いですね。
そうなんです。

> RubyScript を再帰的に呼び出すと死にます。
微妙なとこなんですが、
scRB.Language = 'RubyScript'
の部分を
scRB.Language = 'GlobalRubyScript'
に変えてください。正しく動く筈です(少なくても、僕のWin2Kでは動いてます)。

これは何かと言うと、ActiveScriptRuby自身は、2種類のActiveScriptから構成
されているからです。ひとつが、RubyScriptで、もうひとつがGlobalRubyScript
です。
で、両者は、排他的な存在のため、同一のプロセスで共存することは不可能です。
それぞれの機能は
RubyScript -> マルチスレッディングホスト(ActiveScriptを使用するプログラ
ム)用
GlobalRubyScript -> シングルスレッディングホスト用
となっており、GlobalRubyScriptがホストのスレッドを全く意識しないのに対し
て、RubyScriptは、ホストとは独立したスレッドにRubyを封じ込めるようになっ
ています。そのため、Rubyの初期化やCOMとのインターフェイスが相当異なるた
め、共存できないということになります。

使い分けとしては、WSHや、自作のシングルスレッドアプリケーション
->GlobalRubyScript、 IEやASP(但しIISでの実行は遊び以外には使用しないで
下さい。内部でデッドロックする可能性が非常に高いです)や、自作マルチスレッ
ドアプリケーション->RubyScriptということになります。
そのため、Wscript, CScriptおよびRuby.EXEから実行する場合は、シングルスレッ
ドアプリケーションということになるため、内部で使用するActiveScriptRubyも、
GlobalRubyScriptでなければならないということになります。
あと、ASRインストール時に、WScriptにはGlobalRubyScriptが関連付けられます。

#RubyScript「だけ」でも良かったように思い始めてたけど、Ruby.EXEからASRを
呼び出すというシナリオがちょっとでもあるなら、やはりGlobalRubyScriptは必
要だったと。
-- 
arton <arton / geocities.co.jp>