<%@ LANGUAGE = VBScript %> モジュール 3: 独自の ActiveX サーバー コンポーネントの記述

モジュール 3: 独自の ActiveX サーバー コンポーネントの記述

モジュール 2 では Active Server Pages (ASP) に付属のコンポーネントについて学びました。ここでは特定の用途を持った専用のコンポーネントを自分で作成することを考えます。

たとえば、Web サイトを通じて特定の財務機能を利用することを考えます。ASP ではこのような機能の提供が明示されているわけではありませんが、ActiveX サーバー コンポーネントを自分で作成するだけでこれを実現できます。このモジュールでは実際にこの財務用 ActiveX サーバー コンポーネントを作成してみます。作成したコンポーネントは付属のフォームから呼び出します。

注意   このモジュールでは、次のソフトウェアがコンピュータにインストールされていることが必要です。


作業 1: 財務コンポーネントの作成

コンポーネントは、スクリプト言語だけでは実現できない付加的な機能を提供するためにスクリプトから呼び出される、関連するメソッド (関数) の集まりです。VBScript には財務関数が提供されていないため、それらを利用するためには "財務" サーバー コンポーネントを自作して Visual Basic の財務関数にアクセスできるようにする必要があります。作成したサーバー コンポーネントからは、DDB 関数 (減価償却費)をはじめ、FV 関数 (将来価値)、IPmt 関数 (支払金利)、IRR 関数 (内部利益率) などの Visual Basic 財務関数のすべてにアクセスできます。このチュートリアルでは FV 関数の実装についてのみ説明しています。

Visual Basic の起動

  1. タスクバーの [スタート] ボタンをクリックします。
  2. [Visual Basic 4.0] を選択します。
  3. サブメニューから [Visual Basic 4.0] をクリックして、開発環境を起動します。

Visual Basic 財務関数の詳細

Visual Basic のヘルプ システムで、利用できる関数について調べます。

  1. [ヘルプ] をクリックします。
  2. [キーワードで検索] を選択します。
  3. [キーワード] タブをクリックし、検索語句として「財務」と入力します。
  4. キーワード "財務" をダブルクリックします。
  5. [FV 関数] をクリックするとその説明が表示されます。
  6. 財務関数の確認を終えたら [Visual Basic ヘルプ] ダイアログ ボックスを閉じます。

プロジェクトの命名

Visual Basic では、ASP スクリプトでサーバー コンポーネントを使う際に参照する名前の最初の部分を、プロジェクト名として使用します。

  1. [ツール] をクリックします。
  2. [オプション] を選択します。
  3. [プロジェクト] タブをクリックします。
  4. [プロジェクト名] テキスト ボックスで [Project1] という値をダブルクリックします。
  5. 「MS」 と入力し、[OK] をクリックします。

これでプロジェクトが MS という名前になりました。後で、財務サーバー コンポーネントを ASP スクリプトから MS.Finance という名前で参照します。

デフォルト フォームの削除

次に、財務サーバー コンポーネント作成のための準備作業を行います。Visual Basic などの言語で記述されるスクリプトと ActiveX サーバー コンポーネントとのインターフェイスは、メソッドとプロパティによって実現します。ブラウザはサーバー上で実行されるスクリプトを要求することができるため、実行中のスクリプトではサーバー コンポーネントから情報を取得し、その情報を整形してブラウザに返すことができます。ただし、サーバー コンポーネントからはサーバーの画面上にダイアログ ボックスを表示することはできません。これは、サーバーの画面はクライアントのブラウザに表示されないためです。

Visual Basic version 4.0 はデフォルトのフォームを自動的に作成しますが、このデフォルト フォームは使わないのでプロジェクトから削除します。

  1. [表示] メニューで [プロジェクト ウィンドウ] を選択します。
  2. [Project1] プロジェクト ウィンドウの中の [Form1] を選択します。
  3. [ファイル] メニューで [ファイルの解放] を選択します。

プロジェクトへの財務クラスの追加

Visual Basic では、呼び出し可能な関数の集合を持つコンポーネントを作成するために、クラスを定義します。クラスとはメソッドとプロパティをグループ化するためのものです。プロジェクトの中では、クラスは財務メソッドを指定する場所になります。

  1. [挿入] メニューで [クラス モジュール] をクリックします。
  2. F4 キーを押して Class1 のプロパティ シートを表示します。
  3. [インスタンス][0 - Not Creatable] という値をクリックします。
  4. 矢印をクリックしてから [2 - Creatable MultiUse] を選択します。
  5. [Class 1] をトリプルクリックしてクラス名を選択します。
  6. Finance」と入力してクラス名を変更します。
  7. [Public] プロパティで [False] をクリックします。
  8. t」と入力し、[Public] プロパティで [True] を選択します。
  9. Finance プロパティ シートを閉じます。

財務クラスへの CalcFV 関数の追加

財務サーバー コンポーネントの作成には若干のプログラミング コードが必要です。このコードは、Visual Basic の組み込みの将来価値関数を、コンポーネントで使用する言語の中で利用できるようにするものです。

次の行をコピーして [Finance] クラス ウィンドウに貼り付けます。

Public Function CalcFV(rate, nper, pmt, Optional pv, Optional whendue) 
CalcFV = FV(rate, nper, pmt, pv, whendue)
End Function

コンポーネントのエントリ ポイントの追加

サーバー コンポーネントはすべてエントリ (開始) ポイントが必要になります。エントリ ポイントとは、オブジェクトがはじめて言語の中で利用できるようになったときに呼び出されるコードのことです。VBScript では、Server.CreateObject を使用するときに、オブジェクトのインスタンスが作成されます。Server.CreateObject ステートメントが実行されると、Visual Basic で作成されたサーバー コンポーネント内の Sub Main プロシージャが呼び出されます。

作成する財務コンポーネントでは、呼び出し時にコンポーネント自身を初期化するための特殊なコードは必要ありません。このため、Sub Main プロシージャを空のまま (Visual Basic のステートメントなし) にしておくことができます。

  1. [挿入]メニューで [標準モジュール] を選択します。
  2. [Module 1] ウィンドウで、「Sub Main」と入力します。
  3. Enter キーを押します。

これにより、次のコードが自動的に入力されます。

Sub Main()
End Sub

財務プロジェクトの保存

作業内容を保存するときは、Visual Basic プロジェクトの 3 つの要素 (プロジェクト ファイル、クラス モジュール、コード モジュール) をすべて保存するかどうかをたずねてきます。

  1. [ファイル] メニューを開きます。

  2. [名前を付けてプロジェクトの保存] を選択します。

  3. [ファイル名] テキスト ボックスに、「DriveLetter:\<%= Request.ServerVariables("SERVER_NAME")%>\winnt\system32\inetsrv\asp\cmpnts\Finance」と入力します。ここで DriveLetter は使用しているコンピュータで有効なドライブ名です (デフォルトのインストール ディレクトリを指定しなかった場合は、\winnt\system32 の部分を適切なインストール ディレクトリ名に置き換えてください)。

  4. [保存] ボタンをクリックします。

    以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、"ファイルが既に存在します" というメッセージが表示されますので、自分のファイルを上書き保存してください。

  5. [保存] ボタンをクリックして Module1 を保存します。

    以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、"ファイルが既に存在します" というメッセージが表示されますので、自分のファイルを上書き保存してください。

  6. [ファイル名] テキスト ボックスの [Project1] という値をダブルクリックして選択します。

  7. プロジェクト ファイル (.vbp) の名前として「Finance」と入力します。

  8. [保存] ボタンをクリックしてプロジェクトを保存します。

    以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、"ファイルが既に存在します" というメッセージが表示されますので、自分のファイルを上書き保存してください。

コンポーネントをプロセス内コンポーネントにする

Visual Basic では、プロセス内 ActiveX コンポーネント (正式名称は OLE オートメーション サーバー) とプロセス外 ActiveX コンポーネントを作成できます。プロセス内 ActiveX コンポーネントとは呼び出し側プロセスがロードするダイナミックリンク ライブラリ (ファイル名拡張子 .dll) のことであり、プロセス外 ActiveX コンポーネントとは呼び出し側アプリケーションとは別のプロセスとして実行される実行可能ファイル (ファイル名拡張子 .exe) のことです。プロセス内コンポーネントは呼び出し側プログラムと同じプロセス空間にあるため、プロセス外コンポーネントよりもパフォーマンスが良くなります。

財務サーバー コンポーネントをプロセス内 ActiveX コンポーネントにするには

  1. [ファイル] メニューを開きます。
  2. [OLE DLL ファイルの作成] を選択します。
  3. [オプション] ボタンをクリックします。
  4. [自動インクリメント] チェック ボックスをオンにします。
  5. [OK] をクリックします。
  6. DriveLetter:\<%= Request.ServerVariables("SERVER_NAME")%>\winnt\system32\inetsrv\asp\cmpnts\Finance」と入力します。ここで DriveLetter は使用しているコンピュータで有効なドライブ名です (デフォルトのインストール ディレクトリを指定しなかった場合は、\winnt\system32 の部分を適切なインストール ディレクトリ名に置き換えてください)。
    以前にほかのユーザーがチュートリアルのこの部分を既に修了している場合は、"ファイルが既に存在します" というメッセージが表示されますので、自分のファイルを上書き保存してください。
  7. Visual Basic を終了します。

財務サーバー コンポーネントの登録

サーバー コンポーネントはすべて登録が必要です。Windows NT および Windows 95 は、システム レジストリを利用して利用可能なサーバー コンポーネントを管理しています。財務サーバー コンポーネントを登録することで、VBScript やコンピュータ上で利用できるほかのすべての OLE 互換の言語から呼び出すことが可能になります。

  1. コマンド プロンプト ウィンドウを開きます。
  2. コマンド プロンプトで「cd Drive Letter:\<%= Request.ServerVariables("SERVER_NAME")%>\winnt\system32\inetsrv\asp\cmpnts」と入力します。ここで DriveLetter は使用しているコンピュータで有効なドライブ名です (デフォルトのインストール ディレクトリを指定しなかった場合は、\winnt\system32 の部分を適切なインストール ディレクトリ名に置き換えてください)。
  3. Enter キーを押します。
  4. regsvr32 Finance.dll」と入力します。
  5. Enter キーを押します。
  6. "DllRegisterServer in finance.dll succeeded" というメッセージのあるダイアログ ボックスが表示されたら [OK] ボタンをクリックします。
  7. コマンド プロンプト ウィンドウを閉じます。

作業 2: スクリプトからの財務コンポーネントの呼び出し

コンポーネントをテストする場合、Visual Basic for Applications をはじめとする OLE オートメーション コントローラを使用する、Active Server Pages (ASP)、Visual Basic、Microsoft(R) Office などのプロダクトからコンポーネントを呼び出すことができます。

Active Server Pages から VBScript を使って財務サーバー コンポーネントを呼び出す場合は、HTML フォームを使って入力を行い、個人の貯蓄計画の予想額を計算することができます。

HTML フォーム

テストでは、貯蓄計画に必要な値を収集するために HTML フォームを使います。収集された値は、ASP スクリプトで Request オブジェクトの一部として使用する変数に割り当てられます。値は HTML フォームから参照できます。たとえば、フォーム上で入力した年間の平均利息は Request("APR") というスクリプトを使って参照できます。値の入力に必要な入力フィールドは、HTML タグ <INPUT TYPE=TEXT NAME=APR> によって設定できます。

ユーザーが [送信] ボタンを押すと、ASP が動作している Microsoft Web サーバーにフォームが送信されます。[送信] ボタンを押すと HTML フォーム タグの ACTION プロパティで示されているページが呼び出されます。[送信] ボタン用の HTML タグ (<INPUT TYPE=SUBMIT VALUE=" 予想額の計算 ">) が実行されると、HTML フォーム タグ (<FORM METHOD=POST ACTION="Finance.asp">) の ACTION の値によって、ASP ページ Finance.asp が呼び出されます。

このフォームは既に作成済みですので、ここではテキスト エディタを使って Lessons ディレクトリにある Finance.htm ファイルを開きます (Lessons ディレクトリはデフォルトでは Drive Letter:\<%= Request.ServerVariables("SERVER_NAME")%>\Inetpub\Aspsamp\Tutorial\Lessons です。DriveLetter は、使用しているコンピュータで有効なドライブ名に置き換えてください)。

スクリプト

VBScript を使って財務サーバー コンポーネントを呼び出します。スクリプトでは、まず HTML フォームからの入力値を確認し、入力されなかった値についてはデフォルト値を割り当てます。HTML フォームの各ボックスに入力された値が (有効な) 数値であるかどうかをテストするために、VBScript の IsNumeric 関数が使われています。

次に Server.CreateObject を使い、作成した財務コンポーネントのインスタンスを MS.Finance という名前で作成し (利用可能にし) ます。いったんサーバー コンポーネントを作成すると、そのメソッドとプロパティが使えるようになります。Server.CreateObject の直後のスクリプト行では、CalcFV メソッドを使って貯蓄計画の予想額を計算しています。そして、情報を要求したユーザーのブラウザにこの計算の結果が送信されます。

スクリプトを見るには、テキスト エディタを使って Lessons ディレクトリにある Finance.asp ファイルを開きます (Lessons ディレクトリはデフォルトでは Drive Letter:\<%= Request.ServerVariables("SERVER_NAME")%>\Inetpub\Aspsamp\Tutorial\Lessons です。DriveLetter は、使用しているコンピュータで有効なドライブ名に置き換えてください)。

自分のブラウザでテスト

Finance.asp ASP ページを実行するには、Finance.htm フォームを開きます。するとこのフォームから Finance.asp スクリプトが呼び出され、HTML フォーム上で指定された貯蓄計画の予想額が計算されます。

  1. ブラウザを /aspsamp/tutorial/lessons/finance.htm">http://<%= Request.ServerVariables("SERVER_NAME")%>/aspsamp/tutorial/lessons/finance.htm にポイントして Finance.htm を開きます。
  2. 必要ならば 貯蓄計画 フォームに値を入力します。
  3. [予想額の計算] ボタンをクリックすると、貯蓄計画の予想額が表示されます。

比較的短時間で便利な ActiveX サーバー コンポーネントを作成することができました。ほかの財務関数が必要な場合には、Visual Basic に組み込まれているそれらの関数を、作成した財務サーバー コンポーネントの追加メソッドとして実装することができます。


(C) 1996-1997 Microsoft Corporation. All rights reserved.