Click here to visit our sponsor

基本篇


はじめに

スケルトンは Windows Script Component Wizard で作るよろし。(英語版しかない)
ヘルプは WSH の奴を見るよろし。(日本語版あるよ)
この2つは Microsoft のページでダウンするよろし。
ここではヘルプを見てるのが前提だよん。

あと、自分向けに書いてる所もあるので、判り難い部分が多々あります。
コード記述の基本は JScript です。


目次

  • 要素
    • <?xml?>
    • <?component?>
    • <registration>
    • <implements>
    • <object>
    • <reference>
    • <resource>
    • <component>
    • <package>

登録・解除

インストール・アンインストールは、Explorer からメニューを選択するか、
プロンプトから Regsvr32.exe を使う。


要素 (タグ)

<?xml?>XML の宣言
<?component?>エラーとデバッグのモード
<registration>登録情報
<implements>プラスαの実装
<object>オブジェクトのロード
<resource>リソース
<reference>参照
<public>宣言を囲む所
<component>オブジェクトを囲む所
<package>コンポーネントを囲む所

<?xml?>

<?xml version="1.0" encoding="Shift_JIS"?>
変なエラー出る要因になるから、文字コードは入れといた方がいいよん。
XML なので、大小文字を区別。

<?component?>

error

エラーを表示するかどうか。開発中はこれを true、出来上がったら false
true にしてると scrobj.dll がエラーを表示してホストにエラーを返す。
false にすると表示しないでホストにエラーを返す。

ホストが WScript.exe だと似たようなエラーダイアログを出すので区別しにくいんだなこれが。(発生行が違う)
しかし、scrobj.dll がエラー表示した時、WSH は黙ってるの、不思議だ。
(内緒で連絡とってるね、こりゃ)

debug

スクリプトデバッガー使うかどうか。使ったことないので知りません。

<registration>

classid = "GUID"

レジストリHKCR\CLSID\ にズラーっとある、あれ。
略すと WSC 登録時に勝手に作ってくれる親切設計。
(Wizard なら入れてくれる親切設計)

progid = "ProgID"

Programmatic ID。CLSID の別名。CLSID だと人間が判り難いので設けて有る。
CLSID を省略したらこれが必要。
これといって理由がない場合、入れておくのが無難。

(ProgID の名前の付け方は TypeLibraryName.CoClassName とすべきとある。VB はそうしてる)
例) Company.Component

version

バージョン。ProgID の末尾に付くから整数だけにした方がいいみたい。
Company.Component.1.00 じゃぁ、ちとカコわるい。

version="1" にした時 → Company.Component.1 となる
この例だと、
  HKCR\Company.Component
  HKCR\Company.Component.1
の2つがレジストリに登録されます。

description

ヘルプ文字。レジストリHKCR\CLSID\{GUID}\(標準) の所に登録される。
開発ツールの表示で使われる。

remotable

DCOM を使うか。

<implements>

他に実装するもの。
普通のオブジェクトを作るなら、指定する必要なし。

今のところ、ASP と HTML Behavior の2つある。
ASP はやらないので知らない。
HTML Behavior は、WebBrowser Control を使った ActiveX Control が作成できそうだが、出来ない。
それが出来るのは Scriptlet Control。(ただ、本気で使うレベルにならない)
たいして変わらないので、出来てもいいのに・・・。

<object>

IE の DHTML で使う <object> と同じ。
内部で使う外部オブジェクトをロードする。

<object> が有効かどうかは WSC の登録時にチェックしてくれる。
WSC 登録後に <object> のコンポーネントが解除されたかなんかで、ロード出来ない場合、
クライアント実行時に WSC のインスタンス生成は失敗する。
(0x80040049 エラー)

外部オブジェクトが、ロードエラーでも対処できる場合、
コード中に CreateObject (VBscript) や、
ActiveXObject (JScript) を使っても同じ。

<reference>

タイプライブラリの外部参照。
定数の定義を読み込ませるためだけに使う。

object = "ProgID

ProgID から指定する場合。
指定の ProgID の奴がタイプライブラリを持ってなかったらどうなるんだろ?。(未調査)

guid = "TypeLibID"

TypeLib キーにずらっとある奴で直接指定する場合。

version

HKCR\TypeLib\{GUID}\1.0\... って奴の "1.0" の部分の指定なんじゃない。(デフォ "1.0")

<resource>

リソース。
getResource関数で取得するって。

<component>

1つのオブジェクトを囲む。

<package>

1つ以上の <component> を囲む。


タイプライブラリの生成

まず、WSH 5.6 のヘルプの間違いから。
「スクリプト コンポーネント タイプ ライブラリの作成」という項目中に

set oTL = CreateObject("Scriptlet.GenerateTypeLib")

とあるが、これは

set oTL = CreateObject("Scriptlet.TypeLib")

が正しい。

・・・つづく


おわりに

このページの満足度は・・・

素晴らしい!
まあまあ、良いかも
自己満足感がよくわかるページですね
まったくもって説明不足


WSCページトップ

HOME

兄弟ページ 姉妹ページ
Click here to visit our sponsor