アプリケーションでのスクリプト コンポーネントの使用

Windows®スクリプト コンポーネントを作成した後は、Microsoft® Visual Basic®、C++、Microsoft® Internet Explorer などのホスト アプリケーションから呼び出すことで、COM コンポーネントと同じように使用できます。

メモ   DHTML Behavior 用に作成されたスクリプト コンポーネントは、一般的な COM オブジェクトとは異なる方法でインスタンスが作成されます。詳細については、Microsoft Site Builder Network (SBN) Web サイトの「Using DHTML Behaviors」を参照してください。

ホスト アプリケーションや、使用するスクリプト コンポーネントの種類、スクリプト コンポーネントが配布される場所などに応じて、スクリプト コンポーネントのインスタンスを作成する方法はさまざまです。しかし、最も重要な要素は、スクリプト コンポーネントのインスタンスをローカル (アプリケーションと同じコンピュータ) に作成するか、リモート (アプリケーションとは異なるコンピュータ) に作成するかということです。

どちらの場合も、次の点に注意してください。スクリプト コンポーネントのインスタンスを作成し、そのインスタンスを使用しながら .wsc ファイルを変更しても、コンポーネントのインスタンスは更新されません。更新するには、スクリプト コンポーネントの新しいインスタンスを作成します。

使用できる正確なプロパティとメソッドは、<public> 要素およびスクリプト コンポーネント ファイル内のスクリプトによって定義されます。Visual Basic など、ステートメントの補完をサポートする環境で作業する場合、タイプ ライブラリを生成して使用していれば、スクリプト コンポーネントのプロパティおよびメソッドを参照することができます。詳細については、「スクリプト コンポーネント タイプ ライブラリの作成」を参照してください。

スクリプト コンポーネントのインスタンスの作成に失敗した場合、原因の多くは、スクリプト コンポーネント ファイル内の構文エラーと実行時エラーです。XML 要素 (<registration> 要素を含む) の解析エラーによって、インスタンスの作成が失敗することがあります。スクリプト コンポーネント ファイルを開発している場合は、「スクリプト コンポーネント ファイルのエラー チェック」で説明しているように、<?component?> 処理命令にエラー チェックのオプションを設定します。

**ヒント   **スクリプト コンポーネントによって公開される COM インターフェイスを、ホスト アプリケーションから簡単に参照できるようにするには、スクリプト コンポーネント ランタイムを使用してタイプ ライブラリを生成します。このタイプ ライブラリには、スクリプト コンポーネントで利用できるプロパティ、メソッド、およびイベントについての情報が含まれています。詳細については、「スクリプト コンポーネント タイプ ライブラリの作成」を参照してください。

スクリプト コンポーネントのローカル インスタンスを作成する

スクリプト コンポーネントをホスト アプリケーションと同じコンピュータにインストールする場合は、「スクリプト コンポーネントの登録」で説明しているように、スクリプト コンポーネントをスクリプト コンポーネント自体のコンポーネントとして登録できます。登録すると、ホスト アプリケーションでオブジェクト インスタンスを作成する一般的な方法 (CreateObject 関数など) が使用できます。たとえば、プログラム ID が Component.MyComponent として登録されているスクリプト コンポーネントのインスタンスを Visual Basic で作成するには、次のステートメントを使用します。

Set oScriptlet = CreateObject("Component.MyComponent")

メモ   ホスト アプリケーションが Visual Basic であり、スクリプト コンポーネントによって発生したイベントを処理する場合は、次のコードのように、WithEvents キーワードを含む Dim ステートメントで事前にオブジェクトをバインドする必要があります。

Dim WithEvents scMyScriptlet As MyScriptlet
Private Sub Command1_Click()
   Set scMyComponent=CreateObject("MyComponent")
End Sub

**メモ   **詳細については、「ホスト アプリケーションでのスクリプト コンポーネント イベントの処理」を参照してください。スクリプト コンポーネント イベント用のハンドラを記述しない場合は、参照する必要はありません。

Web ページ上であれば、<OBJECT> タグを使用して、スクリプト コンポーネントのインスタンスを作成できます。次のコードに示すように、スクリプト コンポーネントのクラス ID を調べて、その ID を <OBJECT> タグ内に含めます (スクリプト コンポーネントのクラス ID は、事前にわかっている必要があります)。

<OBJECT
   ID="oComponent"
   CLASSID="clsid:855c8606-49ba-11d2-a428-00c04f8ec80b">
</OBJECT>

スクリプト コンポーネントがローカル コンピュータに登録されていない場合は、スクリプト コンポーネント モニカを使用して、そのスクリプト コンポーネントのインスタンスを作成できます。モニカは、GetObject などの関数でサポートされています。スクリプト コンポーネント ランタイムの Scrobj.dll は、ローカル コンピュータに登録されている必要があります。

メモ   GetObject 関数は、セキュリティ上の理由により、Microsoft® Internet Explorer 用のスクリプト コンポーネントでは、サポートされません。

たとえば、次のコードは、Visual Basic の GetObject 関数を呼び出して、未登録のスクリプト コンポーネントのインスタンスを作成します。

Set oComponent = GetObject("script:c:\COM\MyComponent.wsc")

モニカによって参照される .wsc ファイルに、2 つ以上のスクリプト コンポーネントがある場合は、ファイル名の後ろに区切り文字 (#) とスクリプト コンポーネントの名前を付けて、スクリプト コンポーネントのインスタンスを指定します。次のコードは、MyComponent.wsc ファイル内に含まれる "math" という ID を持つスクリプト コンポーネントのインスタンスを作成する例です。

Set oComponent = GetObject("script:c:\COM\MyComponent.wsc#math")

URL モニカを使用すると、Web サーバーなど、ほかのコンピュータ上にあるスクリプト コンポーネントのインスタンスを作成できるようになります。この場合、次のコードに示すように、完全な URL (HTTP プロトコルを使用した) を使用して、スクリプト コンポーネントの位置を指定します。

Set oComponent = GetObject("script:http://myserver/MyComponent.wsc")

Internet Explorer 5.0 は、スクリプト コンポーネントのインスタンスを作成するための DHTML Behavior 構文をサポートします。この構文は、オブジェクトのインスタンスを作成する一般的な構文とは多少異なり、安全性に欠けるシステム オブジェクトに対して、スクリプト コンポーネントがアクセスできないことを保証します。例については、Microsoft Site Builder Network (SBN) Web サイトの「Using DHTML Behaviors」を参照してください。

スクリプト コンポーネントのリモート インスタンスを作成する

スクリプト コンポーネントの <registration> 要素の remotable 属性が "true" に設定されている場合、分散 COM (DCOM) を使用して、その他のコンピュータからリモートでスクリプト コンポーネントのインスタンスを作成できます。

ローカルとリモートの両方のコンピュータには、基本的な DCOM がインストールされている必要があります。コンピュータ上で次のいずれかが動作している場合は、DCOM が正しく構成されています。

  • Windows NT 4.0。
  • Internet Explorer 4.0 を搭載している Windows 95。
  • OSR2 (OEM Service Release 2) 以降の Windows 95。詳細については、Microsoft® Web サイトの Windows 95 OSR2 のページを参照してください。
  • DCOM for Windows 95 Version 1.2 を搭載している Windows 95。詳細については、Microsoft® Web サイトの DCOM for Windows 95 のページを参照してください。

スクリプト コンポーネント自体は、次のように配布します。

  • ローカル コンピュータでは、スクリプト コンポーネントのインスタンスを作成するときに、スクリプト コンポーネント (.wsc ファイル) もスクリプト コンポーネント ランタイム (Scrobj.dll) も必要ありません。ただし、ローカルの Windows レジストリには、DCOM 用にリモート スクリプト コンポーネントへの参照が必要です。詳細については、「スクリプト コンポーネントの登録」を参照してください。
  • リモート コンピュータ上には、スクリプト コンポーネントとスクリプト コンポーネント ランタイムが必要です。いずれも登録する必要があります。

リモート スクリプト コンポーネントのインスタンスを作成すると、そのインスタンスは、ローカル オブジェクトのようにアプリケーション内で動作します。つまり、ローカル インスタンスのときと同じように、メソッドを呼び出したり、プロパティを取得して設定したりできます。一方、リモート スクリプト コンポーネントのスクリプトは、リモート マシンで動作し、そのマシンのリソースに (セキュリティなどの制限の範囲内で) アクセスします。ローカル マシンのホスト アプリケーションとリモート マシンのスクリプト コンポーネントの間の通信は、DCOM によって自動的かつ隠蔽された状態で処理されます。

スクリプト コンポーネントのリモート インスタンスを作成するには、CreateObject メソッドを呼び出し、引数としてリモート コンピュータの名前を渡します。

メモ   CreateObject メソッドを使用して、リモート スクリプト コンポーネントのインスタンスを作成するには、Visual Basic Version 6.0 以降または VBScript Version 5.0 以降が必要です。

次の Visual Basic のコードは、"myserver" というコンピュータに、スクリプト コンポーネントのリモート インスタンスを作成する例です。

Set newS = CreateObject("Component.MyComponent", "myserver")

メモ   最初にスクリプト コンポーネントのリモート インスタンスを作成するときは、DCOM がコンピュータ間の通信を確立している間、多少の時間を要する場合があります。

参照

登録情報の作成 | スクリプト コンポーネントの作成 | スクリプト コンポーネントのしくみ | スクリプト コンポーネントの紹介 | スクリプト コンポーネントの登録