著作一覧 |
state = { :idle => Proc.new { |x| x != 0 ? :eat(x) : :idle }, :get_eod => Proc.new { |x| some_func(); :idle }, :read_char => Proc.new { |x| return :get_eod x == EOD; eat(x); }, ... } x = :idle while s = stm.read(1) x = state[x].call(s[0]) end
簡単だな。
In Windows Explorer, right-click the script component .wsc file, and then choose Generate Type Library.
A .tlb file is generated for the script component with the same name as the script component file, written to the folder where the .wsc file is, and registered in the Windows registry.
太字はおれだが、元ネタはms-help://MS.MSDNQTR.v80.ja/MS.MSDN.v80/MS.WEBDEV.v10.en/script56/html/letcreatetypelib.htm
だ。
でも、GoogleでScriptlet.tlbを検索すると、見ているのと同じことが起きるようだ。というか、そこらじゅうにscriptlet.tlbができまくるんだが、1つのディレクトリに複数のwscを入れるのはだめということなのか?
追記:いろいろ試していたら、GUIDを自動生成しているもんでHKCR\TYPELIBの下が極度に汚染されてしまってやっかいなのなんのって。結局自分で作れというのが答えのようだ。
WSCの自動生成TypeLibも半自動生成(自分でScriptlet.TypeLib呼ぶやつ)も、どっちもメソッドの引数をparameter要素で指定したやつに、OptionalArgsを付ける。付けるのは良いかも知れないが、問題は.NETのInteropがこいつを読むと、誰にも扱えない値型の配列にしてしまうことだ。本当は扱えるかも知れないけど(と譲歩)。
このためVB.NETからはWSCコンポーネントを呼べない。何をしようがパラメータの型違いでコンパイルできないからだ。一方のC#はnullを使えばごまかせたのだが、その後がだめだ、というか無理矢理どうにかしようとしたら、QIエラーを返してくれている。IDispatchは使わないと決め込んでいるらしい。むむ(ちょっと手を考え付いたが、それはいやだな)。
ってことは、何かするにはVS6をインストールしなきゃならないということか? それは今更っぽ過ぎてとてもやだ。
などとやってるうちに、早くも木曜の朝ではないか。どうしよう?
ジェズイットを見習え |
早くも木曜の朝。そうなんですよ。どうしよう?