ASP レクチャー 10: 自分でコンポーネントを作成する
著者:Eve Cole
更新時間:2009-05-30 19:54:53
前回のコンテンツでは、コンポーネントの使用方法を学びましたが、インターネット上には多くのコンポーネントがありますが、小さなコンポーネントには米ドルが必要になることが多く、数元を費やしたい場合は国産のコンポーネントが少なすぎます。場所が見つかりません。簡単です。忘れてください。実際、コンポーネントを書くのは難しいことではありません。低レベルのコンポーネントを書き始めて、徐々に高レベルのコンポーネントを書き始めるだけです。 ActiveX サーバー コンポーネントを作成するには、Visual Basic、C++、Java など、さまざまなツールから選択できます。ここでは、VB を使用したことがあれば、1 時間以内に作成できる最も単純な VB6.0 を選択します。 . ウィジェットが出てきます。
1. 簡単なコンポーネントの作成 - コンポーネントを作成するための最も基本的な手順 このパートでは、主にコンポーネントを作成するための基本的な手順について説明します。さらに詳しく知りたい場合は、VB6.0 ヘルプの「ActiveX DLL の作成」セクションを参照してください。ドキュメント (MSDN ライブラリ内のドキュメント。ファイル名は Vbcon98.chm)。
目的: 最も単純な加算器コンポーネントを作成します。このコンポーネントには 2 つのプロパティと 1 つのメソッドがあります。最も馴染みのある場所から始めましょう。つまり、このコンポーネントがすでに存在すると仮定し、ASP でこのコンポーネントを使用するコードを見てみましょう。
<%
Dim objSum
'最初にコンポーネントを作成します。コンポーネント識別子は TestDll.Sum です。
Set objSum = Server.CreateObject("TestDll.Sum")
'TestDll.Sum の「TestDll」、「Sum」を覚えておいてください。
objSum.augend = 10.52 'augend 属性は加数です
objSum.addend = 382.41 'addend 属性は加数です
Result = objSum.Plus 'Plus メソッドの合計
応答.結果の書き込み
objSum = なしを設定します
%>
次回作に大きく関係するキーワード、TestDll、Sum、augend、addend、Plusを必ず覚えておいてください。詳細な手順は次のとおりです。
1. VB6.0 を実行し、[ファイル] メニューで [新しいプロジェクト] をクリックします。 → [新しいプロジェクト] ダイアログ ボックスで、[ActiveX DLL] アイコンをダブルクリックします。 → Visual Basic がクラス モジュールを新しいプロジェクトに自動的に追加します。プロジェクト Class1 (図 1 に示すように、「プロジェクト エクスプローラー」で確認できます)。
2. F4 キーを押して、「プロパティ」ウィンドウを開きます。 「Name」属性をダブルクリックし、「Class1」を「Sum」に変更します。
3. [プロジェクト] メニューの [プロジェクト 1 プロパティ] をクリックして、[プロジェクト プロパティ] ダイアログ ボックスを開きます。 「プロジェクト名」に TestDll を入力し、「プロジェクトの説明」に「ActiveX DLL サンプルの作成」を入力します。図 2 に示すように。
ヒント: ASP 作成コンポーネントの 2 つの識別子 TestDLL.Sum の意味を理解していますか?
4. [ファイル] メニューで [プロジェクトの保存] をクリックし、プロジェクト ファイルを SetupDll.cls および SetupDll.vbp という名前で保存します。
5. Sum クラスのプロパティを作成します。
(1) 「ツール」メニューから「プロセスの追加」を選択し、「プロセスの追加」ダイアログボックスを開きます。図 3 に示すように、[名前] ボックスに「augend」と入力し、[プロパティ] をクリックして、[OK] をクリックします (注: 現在のフォーカスはコード ウィンドウにある必要があります。そうでない場合、[プロシージャの追加] メニューは無効になります) )。
(2) 「ツール」メニューから「プロセスの追加」を選択し、「プロセスの追加」ダイアログボックスを開きます。 [名前] ボックスに「addend」と入力し、[プロパティ] をクリックして、[OK] をクリックします。
6. Sum クラスのメソッドを作成します。
[ツール] メニューの [プロシージャの追加] をクリックして、[プロシージャの追加] ダイアログ ボックスを開きます。 「名前」ボックスに「Plus」と入力し、タイプに「サブルーチン」または「関数」を選択します。この例では、加数と被加数の合計を返したいので、「関数」をクリックします。 「OK」をクリックします。
これで、前の ASP コードの 5 つのキーワードが使用されたので、多くのことが理解できました。
7.クラス モジュールの Sum コード ウィンドウ内のすべてのコードは次のとおりです。
明示的なオプション
ダブルとしてのプライベート mdbl_augend
Double としてのプライベート mdbl_addend
Public プロパティ Get augend() As Double
オージェンド = mdbl_augend
終了プロパティ
Public プロパティ Let auend(ByVal vNewValue As Double)
mdbl_augend = vNewValue
終了プロパティ
Public プロパティ Get addend() As Double
追加 = mdbl_addend
終了プロパティ
Public プロパティ Let addend(ByVal vNewValue As Double)
mdbl_addend = vNewValue
終了プロパティ
パブリック関数 Plus()
プラス = 加数 + 加数
終了関数
上記のコードは、システムが生成したコードとは若干異なることに気づきました。これは主に、Public Property Get augend() As Variant 部分が実際のデータ型 Double に置き換えられているためです。
注: 実際、x = objSum.augend ステートメントが実行されると、Property Get プロシージャが呼び出されて mdbl_augend の値が取得されます。objSum.augend = 10.52 ステートメントが実行されると、Property Let プロシージャが呼び出され、10.52 が割り当てられます。 mdbl_augend に。
8.最後のステップは、[ファイル] メニューの [Generate .Dll(K)...] をクリックして SetupDll.dll ファイルを生成することです。
この時点で、コンポーネントが作成されました。ここで、まず VB6 でテスト プロジェクトを作成して、ファイルが正しいかどうかをテストします。
1. 「ファイル」メニューの「新規プロジェクト」をクリック→「標準EXE」をダブルクリックします。
2. 「プロジェクト」メニューの「参照」をクリック→「参照」ダイアログボックスの「参照」ボタンを押し、コンパイルしたばかりの「SetupDll.dll」ファイルを選択→「OK」をクリックします。
3.最後に、コード ウィンドウに次のコードを記述します。
明示的なオプション
プライベートサブフォーム_Load()
Dim objSum As TestDll.Sum
objSum = 新しい合計を設定します
objSum.augend = 10.52
objSum.addend = 382.41
MsgBox objSum.Plus
エンドサブ
実行すると正しい結果が得られます。次に、このコンポーネントを ASP で使用します。 SetupDll.dll を Web サーバーにコピーし、「Regsvr32.exe setupdll.dll」コマンドを使用してコンポーネントを登録し、このセクションの先頭にある ASP プログラムをブラウザで実行します。これがうまくいかない場合は、まず VB6 パッケージ化ツールを使用してパッケージ化してからインストールしてください。コンポーネントは自動的に登録され、必要な VB6 実行ファイルも自動的にインストールされます。
注: この部分のプログラムはすべて、ダウンロード パッケージの Setupdll.zip に含まれています。
上記の例では、プロパティ プロシージャ Property Get および Property Let を使用してプロパティを追加します (Property Get はプロパティの値を読み取り、Property Let はプロパティに値を割り当てます)。設定された値を確認する必要がある場合は、次のようにすることができます。 Property Let プロセスに適切なコードを記述します。次のようなコードです。
Public プロパティ Let auend(ByVal vNewValue As Double)
vNewValue < 100 の場合
MsgBox 「何をしているのですか! 値が 100 未満の場合は、自分で計算してください。」
それ以外
mdbl_augend = vNewValue
終了の場合
終了プロパティ
2. コンポーネントにプロパティとメソッドを追加するその他の方法
1.属性を追加する最も簡単な方法: 上の例のようにパブリック変数を追加します。最も簡単なコードは次のとおりです。
明示的なオプション
Public augend As Double ' augend 属性を追加します
Public addend As Double ' addend 属性を追加します
Public Function Plus() As Double
プラス = 加数 + 加数
終了関数
ただし、このメソッドで設定できるのは読み取り/書き込みプロパティのみであり、割り当てられた値を確認することはできません。読み取り専用属性を追加するだけの場合: 上記の例では、Public Property Let augend(ByVal vNewValue As Double) プロセスを削除すると、augend は読み取り専用属性になり、値を割り当てることができなくなります。もちろん、書き込み専用プロパティを追加する場合は、Property Get プロシージャを削除するだけです。
2.クラスビルダーユーティリティの使用
VB6 にはプロパティとメソッドを追加するためのツールもあります。[アドイン] メニューで [アドイン マネージャー] をクリックし、ポップアップ アドイン マネージャー ダイアログ ボックスで [VB クラス ビルダー ユーティリティ] を選択します。ロード ビヘイビアーで「ロード/アンロード」を選択します (図 4)。次に、[アドイン] メニューの [クラス ビルダー ユーティリティ] をクリックすると、その使用方法がわかります。
3. 注意すべき問題をいくつか教えてください
1. 上記の例は非常に単純なコンポーネントです。より実際的なコンポーネントには通常、少なくとも 1 つのモジュールがあります。
2. 注意しないと、Visual Basic は「シングルスレッド」コンポーネントを生成する可能性があります。
おそらく最も一般的な落とし穴の 1 つは、「シングルスレッド」コンポーネントなど、ASP で実行するように設計されていないコンポーネントを使用することです。したがって、「プロジェクトのプロパティ」ページの「全般」タブで、スレッドモジュールが「アパートメントスレッド」に設定されていることを確認してください。
3. 「型が一致しません」エラーについて。
Out パラメーターを Variant として宣言することをお勧めします。これは上記の例では設定されていないことに注意してください。
4. グローバル変数の使用について。
コンポーネント内でグローバル変数を使用することは避けてください。 Visual Basic の用語では、これは、標準の .BAS モジュールにパブリック変数またはグローバル変数が存在しないことを意味します。グローバル変数は真にグローバルではないためです。各スレッドには独自のコピーがあり、複数のメソッドが同じスレッドで実行された場合、それらのメソッドは同じ変数を参照します。それ以外の場合は、これらの変数の異なるコピーにアクセスします。これは、(スレッド A で) グローバル変数に値を割り当てることができますが、その変数の別のユーザー (スレッド B で実行) は新しい値を参照できないことを意味します。その理由は、Visual Basic が内部で「スレッド ローカル ストレージ (TLS)」を使用してグローバル変数を参照しているためです。これは、各スレッドが Public 変数の独自のコピーを持ち、そのコピーが複数あるため、グローバル データは実際には「グローバル」ではないことを意味します。つまり、たまたま同じスレッドで実行しているユーザーは、予期しているかどうかに関係なく、同じ変数にアクセスすることになります。
最後に、ところで、VB6.0 では、新しいタイプの Visual Basic アプリケーション、IIS アプリケーションが導入されました。 ActiveX DLL を作成するのと同じように、IIS アプリケーションを作成できます。Active Server Pages で作成されたアプリケーションはすべて、VB 開発環境で作成できます。すべての Active Server Pages を 1 つの VB アプリケーションに完全に置き換えることができます。