スケルトンは Windows Script Component Wizard で作るよろし。(英語版しかない)
ヘルプは WSH の奴を見るよろし。(日本語版あるよ)
この2つは Microsoft のページでダウンするよろし。
ここではヘルプを見てるのが前提だよん。
あと、自分向けに書いてる所もあるので、判り難い部分が多々あります。
コード記述の基本は JScript です。
インストール・アンインストールは、Explorer からメニューを選択するか、
プロンプトから Regsvr32.exe を使う。
| <?xml?> | XML の宣言 |
| <?component?> | エラーとデバッグのモード |
| <registration> | 登録情報 |
| <implements> | プラスαの実装 |
| <object> | オブジェクトのロード |
| <resource> | リソース |
| <reference> | 参照 |
| <public> | 宣言を囲む所 |
| <component> | オブジェクトを囲む所 |
| <package> | コンポーネントを囲む所 |
<?xml version="1.0" encoding="Shift_JIS"?>
変なエラー出る要因になるから、文字コードは入れといた方がいいよん。
XML なので、大小文字を区別。
エラーを表示するかどうか。開発中はこれを true、出来上がったら false。true にしてると scrobj.dll がエラーを表示してホストにエラーを返す。false にすると表示しないでホストにエラーを返す。
ホストが WScript.exe だと似たようなエラーダイアログを出すので区別しにくいんだなこれが。(発生行が違う)
しかし、scrobj.dll がエラー表示した時、WSH は黙ってるの、不思議だ。
(内緒で連絡とってるね、こりゃ)
スクリプトデバッガー使うかどうか。使ったことないので知りません。
レジストリのHKCR\CLSID\ にズラーっとある、あれ。
略すと WSC 登録時に勝手に作ってくれる親切設計。
(Wizard なら入れてくれる親切設計)
Programmatic ID。CLSID の別名。CLSID だと人間が判り難いので設けて有る。
CLSID を省略したらこれが必要。
これといって理由がない場合、入れておくのが無難。
(ProgID の名前の付け方は TypeLibraryName.CoClassName とすべきとある。VB はそうしてる)
例) Company.Component
バージョン。ProgID の末尾に付くから整数だけにした方がいいみたい。Company.Component.1.00 じゃぁ、ちとカコわるい。
version="1" にした時 → Company.Component.1 となる
この例だと、
HKCR\Company.Component
HKCR\Company.Component.1
の2つがレジストリに登録されます。
ヘルプ文字。レジストリのHKCR\CLSID\{GUID}\(標準) の所に登録される。
開発ツールの表示で使われる。
DCOM を使うか。
他に実装するもの。
普通のオブジェクトを作るなら、指定する必要なし。
今のところ、ASP と HTML Behavior の2つある。
ASP はやらないので知らない。
HTML Behavior は、WebBrowser Control を使った ActiveX Control が作成できそうだが、出来ない。
それが出来るのは Scriptlet Control。(ただ、本気で使うレベルにならない)
たいして変わらないので、出来てもいいのに・・・。
IE の DHTML で使う <object> と同じ。
内部で使う外部オブジェクトをロードする。
<object> が有効かどうかは WSC の登録時にチェックしてくれる。
WSC 登録後に <object> のコンポーネントが解除されたかなんかで、ロード出来ない場合、
クライアント実行時に WSC のインスタンス生成は失敗する。
(0x80040049 エラー)
外部オブジェクトが、ロードエラーでも対処できる場合、
コード中に CreateObject (VBscript) や、ActiveXObject (JScript) を使っても同じ。
タイプライブラリの外部参照。
定数の定義を読み込ませるためだけに使う。
ProgID から指定する場合。
指定の ProgID の奴がタイプライブラリを持ってなかったらどうなるんだろ?。(未調査)
TypeLib キーにずらっとある奴で直接指定する場合。
HKCR\TypeLib\{GUID}\1.0\... って奴の "1.0" の部分の指定なんじゃない。(デフォ "1.0")
リソース。
getResource関数で取得するって。
1つのオブジェクトを囲む。
1つ以上の <component> を囲む。
まず、WSH 5.6 のヘルプの間違いから。
「スクリプト コンポーネント タイプ ライブラリの作成」という項目中に
set oTL = CreateObject("Scriptlet.GenerateTypeLib")
とあるが、これは
set oTL = CreateObject("Scriptlet.TypeLib")
が正しい。
・・・つづく