同じパッケージ内の別のスクリプト コンポーネントの参照

1 つのパッケージには、複数のWindows®スクリプト コンポーネントを含むことができるので、あるスクリプト コンポーネントのインスタンスから別のスクリプト コンポーネントのインスタンスを作成し、使用することができます。このとき、2 番目のスクリプト コンポーネントを登録する必要はありません。

たとえば、オートメーション インターフェイスを実装するスクリプト コンポーネントを作成し、一連のプロパティとメソッドを公開します。同じパッケージ内に 2 番目のスクリプト コンポーネントを作成し、ASP インターフェイスを実装します。このインターフェイスを実装すると、Microsoft® Internet Information Server (IIS) 用のサーバー オブジェクト モデルにアクセスできます。このオートメーション スクリプト コンポーネントでは、ASP スクリプト コンポーネントを公開し、そのメンバを利用可能にするメソッドまたはプロパティを作成できます。

あるスクリプト コンポーネントからほかのスクリプト コンポーネントを参照するには、2 番目のスクリプト コンポーネントを公開するあるメソッド内に、ひな型となるメンバ (プロパティまたはメソッド) を作成します。

同じスクリプト コンポーネント ファイル内で別のスクリプト コンポーネントを参照するには

  1. 最初のスクリプト コンポーネント内でプロパティまたはメソッドを宣言します。

  2. 新しいプロパティまたはメソッドの定義の一部として、createComponentfunction 関数を呼び出します。

    たとえば、次のコードでは、同じパッケージ内にスクリプト コンポーネントが 2 つあります。最初のスクリプト コンポーネントでは、math メソッドが 2 番目のスクリプト コンポーネントを単に参照します。2 番目のスクリプト コンポーネントは、add メソッドと multiply メソッドを公開します。

メモ   <script> 要素内のスクリプトを隠蔽するには、CDATA セクションが必要です。詳細については、「スクリプト コンポーネント ファイルと XML 適合性」を参照してください。

<?XML version="1.0"?>
<package>
<component id="component1">
<registration progid="Component.FrontEnd"/>
<public>
   <property name="math"/>
</public>
<script language="JScript">
<![CDATA[
var math = createComponent("component2")
   ]]>
</script>
</component>

<component id="component2">
<registration progid="Component.Math"/>
<public>
   <method name="add"/>
   <method name="multiply"/>
</public>
<script language="JScript">
<![CDATA[
function add(n1, n2){
   return n1+n2;
}
function multiply(n1, n2){
   return n1*n2;
}
]]>
</script>
</component>
</package>

参照されているスクリプト コンポーネントを実行するには、そのメソッドまたはプロパティに至るまでの階層を省略しないで指定し、呼び出します。次のコードは、このような呼び出しを行う例です。

' 最初のスクリプト コンポーネントのインスタンスを作成します。
set o1 = CreateObject("Component.FrontEnd")

' 2 番目のスクリプト コンポーネントの関数を直接実行します。
msgbox(o1.math.add(3,5))
msgbox(o1.math.multiply(3,5))

' math メソッドを直接参照する 2 番目のオブジェクトを作成します。
Set o2 = o1.math()
msgbox(o2.add(4,5))
msgbox(o2.multiply(4,5))

createComponent() 関数は、呼び出されるたびに、参照されているスクリプト コンポーネントの新しいインスタンスを作成します。呼び出しの間でインスタンス情報を保存する必要がある場合は、次のコードのように、グローバル変数に 2 番目のスクリプト コンポーネントへのポインタを保存します。

メモ   <script> 要素内のスクリプトを隠蔽するには、CDATA セクションが必要です。詳細については、「スクリプト コンポーネント ファイルと XML 適合性」を参照してください。

<component id="component1">
<registration progid="Component.FrontEnd"/>
<public>
   <property name="math">
      <get/>
   </property>
</public>
<script language="JScript">
<![CDATA[
var m = createComponent("component2")
function get_math(){
   return m
}
   ]]>
</script>
</component>

(Component2 は前の例と同じです)

参照

スクリプト コンポーネント ファイルの内容 | <package> | <component>