vb を使用して ASP サーバー側コンポーネントを作成する
この記事では、ASP コードで VB コンポーネントを呼び出す方法を、従来の設計方法と比較しながら紹介します。この記事では、読者が VB と ASP に関する初歩的な知識を持っていることを前提としています。
サーバー側コンポーネントとクライアント側コンポーネントの比較
サーバー側コンポーネントとクライアント側コンポーネントの間には多くの違いがあります。サーバー側コンポーネントはコンピューター サーバーに登録されている dll ファイルであり、クライアント側コンポーネントはブラウザーが実行されているコンピューターに登録されています。IE では、これらのクライアント側コンポーネントは activex ブラウザー プラグイン コンポーネントと呼ばれます。
ActiveX クライアント コンポーネントは VB で作成し、インターネットまたはイントラネット経由でブラウザに送信して、素晴らしい効果を生成できます。問題は、activex のクライアント側コンポーネントが ie に限定されているのに対し、vb で記述されたサーバー側コンポーネントは純粋な HTML コードを生成でき、すべてのブラウザに適していることです。サーバー側コンポーネントの最大の問題は、コンポーネントが Windows + IIS 環境、または IIS の API と互換性のあるアプリケーションで実行されなければならないことです。それに比べて、サーバー側でこの互換性を実現するのは簡単なようです。
IIS サーバー側コンポーネントは IIS と同じメモリ空間に常駐し、サーバー上で処理される ASP Web ページへの呼び出しに常に対応できます。理論上は、ブラウザに返される ASP コードに任意のテキストやコードを挿入できますが、一般的に言えば、ほとんどのサーバー側コンポーネントは、長時間を必要とする計算やデータベース情報の検索を処理するために使用され、その結果、 HTML コードの形式でブラウザに返されます。
VBコンポーネントの分析
この記事は VB コンポーネントの基本的な作成方法を説明することを目的としているため、問題を説明できれば非常に簡単な例になります。 VB コンポーネントの作成について詳しく説明する前に、まず VB コンポーネントを概念的に分析します。
VB を使用してサーバー側コンポーネントを作成する場合、(VB コードと ASP コードの両方で使用される) 3 つの階層概念に注意する必要があります。
・プロジェクト名
・クラス名
・メソッド名
VB プロジェクトの名前はプロジェクト名です。多くの開発者はプロジェクト名をコンポーネント名と見なしますが、VB ではプロジェクト名のみと見なされます。この例では、プロジェクト名は exampleproject です。もちろん、独自のプロジェクトに任意の名前を付けることができます。クラス名は exampleclass 、メソッド名は examplemethod です。
プロジェクト名 (コンポーネント名) は、コンポーネント コードからコンパイルされた dll ファイルの名前にすることもできます。dll ファイルには、iis がテキストまたは html コードをブラウザに返すために使用されるコンパイルされた vb コードが含まれます。
メソッド名は、日付の計算やデータベース内のすべての作成者のリストの表示など、特定のコード機能を管理する Visual Basic コードの部分を指します。コンポーネント メソッドは、入力情報に基づいて特定の作業を実行したり、特定の情報を返したりする、一種のブラック ボックスです。一般に、コンポーネントには複数のメソッドが存在する可能性があります。コンポーネント メソッドをより効果的に管理するために、メソッドを同様の分類に従ってグループ化できます。これがコンポーネント クラスの役割です。
コンポーネント クラスは、コンポーネント クラス コードのコピーをメモリ内に生成できます。ASP コードを使用してオブジェクトを作成することは、インスタンス化とも呼ばれます。コンポーネント クラス コード インスタンスへのオブジェクト参照を取得したら、ASP コードからクラスに含まれるメソッドを呼び出すことができます。
この例では、プロジェクト名、クラス名、メソッド名を使用して ASP コード内で VB コンポーネントをインスタンス化し、メソッド パラメータの形式で ASP コードから VB コードに値を渡します。これらの値は、 VB メソッドから返される ASP コード。
ASPファイルからvbコンポーネントを呼び出す
vb コンポーネントを呼び出すために使用する asp ファイルは、オブジェクト変数を使用して vb オブジェクトへの参照を保存します。 ASP ファイルでは、ASP サーバー オブジェクトの createobject() メソッドを使用してオブジェクトを作成できます。このメソッドは、作成したオブジェクトへの参照を返します。この例では、コンポーネントのオブジェクト変数として objreference を使用します。次のコードは、vb コンポーネントをインスタンス化するときに、ASP コードがコンポーネントのプロジェクト名とクラス名 (exampleproject と exampleclass) を使用する必要があることを示しています。
vb コンポーネントをインスタンス化するための ASP コード:
set objreference = server.createobject(exampleproject.exampleclass)
vb コンポーネントは、ASP コードから 3 つの変数の値を受け取り、値を ASP コードに返します。その値は、strmethodreturn という名前の ASP 変数に格納されます。次のコードは、ASP コードが vb コンポーネントによって返される値を取得する方法を示しています。param1、param2、parma3 という名前の 3 つのパラメーター値を vb メソッドに渡します。
strmethodreturn = objreference.examplemethod(param1, param2, param3)
3 つのパラメータ param1、param2、および param3 は、VB コンポーネントのメソッドの定義とまったく同じである必要があります。以下は、VB コンポーネントのクラスをインスタンス化し、クラス メソッドを呼び出す 2 行の ASP コードの例です。戻り値を取得します。
set objreference = server.createobject(exampleproject.exampleclass)
strmethodreturn = objreference.examplemethod(param1, param2, param3)
以下のグラフは、VB コンポーネントのプロジェクト名、クラス名、およびメソッド名が ASP ファイル内のコンポーネントのインスタンス化コードとどのように調整されるかを視覚的に示しています。以下の表を参照として使用して、例の vb コードと asp ファイルの記述方法を段階的に学習できます。
VBメソッドの役割
この例の単純な VB コンポーネントは、ユーザーの名前と年齢を取得し、ユーザーの年齢を日数で返します。また、ユーザーに 45 歳を超えているかどうかを通知するオプションもあります。
架空のエリック・クラプトンをメソッドの最初のパラメータ値としてコンポーネントに渡し、2 番目のパラメータを 56 に設定すると、次の戻り文字列が得られます。
エリック・クラプトンは生後20440日を超えました。
オプションの 3 番目のパラメーターを true に設定すると (このパラメーターにより、メソッドはユーザーが 45 歳以上かどうかを判断します)、次の戻り文字列を取得します。
エリック・クラプトンは生後20440日を超えました。
ユーザーの名前、年齢、45 歳以上かどうかという 3 つのまったく異なる変数が使用されるため、この情報を ASP ファイルから VB コードに転送するには 3 つのメソッド パラメーターを使用する必要があります。 VB では、どのデータ型を使用するかを考慮することが非常に重要です。ユーザーの名前を表すために strname という名前の文字列変数、ユーザーの年齢を表すために intage という名前の整数変数、およびユーザーが 45 歳以上かどうかを示すために blnageemphasison という名前のブール変数を使用します。
3 つのメソッド パラメーター (vb コンポーネントのメソッド コードに渡される変数):
strname (文字列)
整数 (整数)
blnageemphasisison (ブール値)
VBでサーバー側コンポーネントを作成する
vbを起動後、「新規プロジェクト」ウィンドウ内の「activex dll」アイコンをダブルクリックします。 VB が新しい activex dll プロジェクトをロードすると、プロジェクト ウィンドウとプロパティ ウィンドウという少なくとも 2 つのウィンドウが開いていることがわかります。ウィンドウが表示できない場合は、VB メニューから [表示] メニュー項目を選択できます (それぞれ [表示] -> [プロジェクト マネージャー]、[表示] -> [プロパティ ウィンドウ] を使用します)。
VB の最初のプロジェクトとクラスのデフォルト名はそれぞれ project1 と class1 なので、それぞれ exampleproject と exampleclass に変更できます。プロジェクト名はプロジェクトウィンドウで変更できます。プロジェクト ウィンドウで新しく入力したプロジェクト名の左側に、+ または - の付いた小さなボックスがあります。 + 記号が表示されている場合は、小さなボックスを選択すると、+ 記号が - 記号に変わり、プロジェクト名の下にデフォルトのクラス名 (class1) が表示されます。プロジェクト ウィンドウでデフォルトのクラス名を選択し、プロパティ ウィンドウでデフォルトのクラス名を exampleclass に変更します。
プロジェクトを保存するとき、VB はクラスを含むコードを拡張子 cls のファイルに保存します。プロジェクト ファイルの拡張子は vbp で、プロジェクトのさまざまな設定、ファイル名、ファイルの保存場所が保存されます。
サーバー側コンポーネントのプロパティ値
プロパティ ウィンドウに exampleclass クラスのプロパティを表示します。インスタンス化プロパティの値が「5 multiuse」である場合、プロジェクト タイプが標準 exe プロジェクトに設定されている場合、このプロパティの値もそれに応じて変更されます。
VBメニューの「プロジェクト」→「ExampleProjectのプロパティ」を選択すると、プロジェクトのプロパティ画面が表示されます。 [全般] タブの右下にある [スレッド モード] プロパティの値を [アパートメント スレッド] に設定する必要があります。これにより、複数の訪問者がコンポーネント クラスの異なるインスタンスを同時に使用できるようになります。また、VB6 でのメモリリークを避けるために、「無人実行」と「常駐メモリ」の 2 つのオプションを選択します。
vbメソッドコード
ここで、vb コード ウィンドウを使用して vb コードを入力する必要があります。コード ウィンドウがまだ空白の場合は、次のコードを入力します。
明示的なオプション
'すべての変数を定義する必要があります。
public function examplemethod(byval strname as string, _
byval intage を整数として、_
オプションの byval blnageemphasisison (ブール値 = false) として文字列として
上記のコードでは、メソッドをパブリック関数として定義しました。これは、コンポーネントの外部のコードがメソッドを呼び出すことができることを意味し、メソッドを呼び出すコードにも値を返します。
文字列としてのパブリック関数 examplemethod()
上記のコードは、examplemethod() 関数が呼び出し元に文字列型の値を返すことを示しています。
私たちの vb メソッドには、ASP コードから値を受け入れる 3 つのパラメーター変数が付属しており、最後のパラメーター変数はオプションです。 VB コンポーネントの外部から値を受け取るために使用されるすべてのパラメーター変数は、VB メソッドの括弧内で定義して使用する必要があります。この方法で定義された変数は、メソッド内で定義された変数と同じようにメソッド パラメーターとして使用できます。それらの間には、値を決定する外部の ASP コードがあります。
3 つの変数とそのデータ型は次のとおりです。
文字列としての byval strname
整数としての byval 整数
オプションの byval blnageemphasis (ブール値 = false)
上記のコードは、3 つのメソッド パラメータのデータ型を定義し、値によって渡されることを示しています。3 番目のパラメータがない場合、そのデフォルト値は false です。
次に、メソッドの定義に必要なカンマ、スペース、アンダースコア (_) を追加して、VB の文法要件を満たすようにします。メソッド定義のかっこの間にパラメーター リストを配置します。結果のメソッド定義は次のようになります。
public function examplemethod(byval strname as string, _
byval intage を整数として、_
オプションの byval blnageemphasisison (ブール値 = false) として文字列として
VB コード ウィンドウに上記のメソッド定義を入力すると、end function ステートメントが生成されます。メソッド定義と終了関数の間に、独自のコードを記述します。
メソッドの本体に追加するコードの最初の行は、メソッドによって返される文字列データを格納する文字列変数を定義することです。文字列変数を使用する代わりに、文字列を使用して、メソッドを呼び出すコードにテキスト データを返すことができます。
文字列としての dim strreturnstring
次に、返される文字列を作成します。メソッドのパラメーター リストを通じて ASP コードによって渡される strname 変数値を使用できます。まず、strname パラメータ変数値と文字列「is over」を連結します。次に、intage パラメーター変数を使用して人の生存日数を計算し、「年齢 (日数)」という文字列を前の文字列に追加します。 2 つの整数の積 intage * 365 を strreturnstring 文字列に結合する前に文字列に変換する必要があることに注意してください。VB の cstr() メソッドはこの目的を達成します。
strreturnstring = strname & は終了しました & cstr(intage * 365)
ASP コードからコンポーネントに渡された名前が eric clapton で、age パラメーターが 56 であると仮定すると、strreturnstring には次の内容が含まれる必要があります。
エリック・クラプトンは20440を超えています
最終的な文字列は、intage 変数の値が 45 を超えているかどうか、および blnageemphasison 変数が true に設定されているかどうかに基づいて追加されます。
「数日前」または「数日前」。次のコードでこの機能を実現できます。
blnageemphasis と intage > 44 の場合
strreturnstring = strreturnstring & 経過日数。
それ以外
strreturnstring = strreturnstring & 経過日数。
終了する場合
ASP コードが blnageemphasison 変数の値をメソッド パラメーターとしてコンポーネントに渡さない場合、その値はメソッド定義に従ってデフォルトで false に設定されます。 true に設定され、intage 変数の値が 45 より大きい場合、次の出力が得られます。
エリック・クラプトンは生後20440日を超えました。
それ以外の場合は、次の出力が得られます。
エリック・クラプトンは生後20440日を超えました。
上記の文字列を呼び出しコンポーネントの ASP コードに返すために、文字列の値をメソッドの名前に割り当てます。
例メソッド = strreturnstring
完全なメソッド コードは次のとおりです。
public function examplemethod(byval strname as string, _
byval intage を整数として、_
オプションの byval blnageemphasisison (ブール値 = false) として文字列として
'///// ローカル変数を作成する
文字列としての dim strreturnstring
'///// 返された変数の値を作成します
strreturnstring = strname & は終了しました & cstr(intage * 365)
'///// strreturnstring を改善
blnageemphasis と intage > 44 の場合
strreturnstring = strreturnstring & 経過日数。
それ以外
strreturnstring = strreturnstring & 経過日数。
終了する場合
'///// 文字列を返す
例メソッド = strreturnstring
終了関数
ASPコードでvbメソッドを呼び出す
ASPコードでvbオブジェクトをインスタンス化する
必要な ASP コードのほとんどは、上記の概念的な概要で説明しました。 ASP コードでは、引き続き次の作業を順番に完了する必要があります。
·ASP サーバー オブジェクトの createobject() メソッドを使用して、vb コンポーネントをインスタンス化します。
·適切なメソッドパラメータ変数を使用してコンポーネントのメソッドを呼び出します。
·vb メソッドから返された文字列値を asp 変数内の変数に代入します。
·次に、response.write() メソッドでこの変数を使用して、文字列をブラウザに送信します。
ASP ファイル内のコードを使用して、vb コンポーネントのクラスをインスタンス化します。次に、vb コンポーネントのインスタンス化のコードを示します。
set objreference = server.createobject(exampleproject.exampleclass)
ASP サーバー オブジェクトの createobject() メソッドは VB コード オブジェクトのアドレスを返すため、ASP 内のクラスのパブリック メソッドを呼び出すことができます。 asp createobject() メソッドのメソッド パラメータは vb プロジェクトとクラスの名前であるため、コンポーネントのクラスのオブジェクト インスタンスへの参照を維持するために objreference が使用されることに注意してください。
ASP ファイルでコンポーネントを使用する方法
ここで、コンポーネントのクラス メソッド examplemethod を使用して、人の寿命を日数で示すことができます。次のコードは、パラメーターの値を使用し、メソッドから返された文字列の値を strmethodreturn という名前の変数に割り当てます。
strmethodreturn = objreference.examplemethod(エリック・クラプトン、56、真)
ヒント: コンポーネントがインスタンス化されると、objreference は createobject() メソッドに現れた exampleproject.exampleclass を表します。 objreference.examplemethod は exampleproject.exampleclass.examplemethod() と同等であると考えることができますが、このように使用することはできません。
もちろん、直接値の代わりに変数をメソッド パラメータとして使用することもできます。選択したパラメータ変数の名前は、VB メソッド パラメータ リストの名前と同じである必要はありません。パラメータリスト内のオプション以外のパラメータの数、タイプ、および数の順序は同じです。
aspname = エリック クラプトン aspage = 56 aspemphasis = true strmethodreturn = objreference.examplemethod(aspname, aspage, aspemphasis)
値の代わりに変数を使用すると、特にコードが長くなった場合に、コードがより明確になり、管理しやすくなります。
ここで必要なのは、asp response.write() メソッドで ASP コードにアクセスするブラウザに strmethodreturn を返すことだけです。以下は完全な ASP コードです。コードの最後に、コンポーネントのオブジェクト アドレスを区切るコード行を追加して、コンポーネントのオブジェクト コードをクリアします。
<%
'///// コンポーネントオブジェクトをインスタンス化する
set objreference = server.createobject(exampleproject.exampleclass)
'///// ローカル変数をメソッドのパラメータとして設定します
aspname = エリック・クラプトン
アスページ=56
無精肺 = 本当
'///// コンポーネントのメソッドを呼び出し、戻り値を格納します
strmethodreturn = objreference.examplemethod(aspname、aspage、aspemphasis)
'///// 戻り値を訪問ブラウザに送信します
応答.write(strmethodreturn)
'///// コンポーネントオブジェクトをクリアします
オブジェクト参照 = 何も設定しない
%>
上記の ASP コードを ASP ファイルに保存すると、次の文字列出力が生成されます。
エリック・クラプトンは生後20440日を超えました。
DLL ファイルを呼び出すための ASP コードを有効にする
私たちのコンポーネントのテストは、コンポーネントがどこに格納されているか、そして ASP コードがいつそれを呼び出すかを Windows に知らせることです。まず、VB メニューの「実行」アイコンまたは「実行/開始」を選択すると、VB はコンポーネントをシステムに一時的に登録します。
ヒント: HTML ファイルをロードする場合と同様に、ブラウザを使用して ASP ファイルを直接ロードすることはできません。Web サーバーを介してブラウザにロードする必要があります。
ブラウザには「エリック クラプトンは 20440 日以上経過しています」という文字が表示されます。
コンポーネントを他のサーバーで実行するには、コンポーネントを dll ファイルにコンパイルし、サーバーに登録する必要があります。もちろん、コンポーネントを開発用コンピューター上で永続的に使用したい場合は、コンポーネントをコンパイルして登録する必要もあります。このコンポーネントを他のコンピュータで実行するために必要な唯一のファイルは、コンパイルされた dll ファイルです。もちろん、そのコンピュータには vb ランタイム ライブラリ ファイルがインストールされている必要があります。
コンポーネントのソース コードをコンパイルして dll ファイルを取得する方法、およびコンポーネントをコンピュータに登録する方法については、この記事の範囲を超えているため、詳細な説明は省略します。
IIS サーバー側コンポーネントを作成する副産物として、任意の ASP ファイルや他の VB コンポーネントから作成したコンポーネントのメソッドを呼び出すことができるため、コードの柔軟性とモジュール性がさらに向上します。