![]() |
■ATOK技術情報 <ATOK12/ATOK11/ATOK10 for Windows AMETアプリケーション開発マニュアル>
6.Visual Basic 4.0によるAMETサーバ作成例 Visual Basic 4.0 (VB4)を使ってAMETサーバを作る方法について説明する。なお、OLEオートメーションサーバの作り方に関しては、Books OnlineのProfessional Edition Documentation−Creating OLE Servers が参考になる。 ここでは実際にVB4でAMETサーバを作成し、その手順をまとめた。作成するAMETサーバ(AmetVB)はAMETの基本機能を備えたサーバである。 VB4でOLEサーバを作成する場合、通常のプロジェクトとは違った設定が必要である。次の手順でOLEサーバ用のプロジェクトを作成する。
手順2.【ツール−オプション】を選択してオプションダイアログを開き、プロジェクトタブ を選択する。 手順3.スタートアップフォームを Sub Main にする。 手順4.プロジェクト名に AmetVB と入力する。 手順5.実行開始モードを OLEサーバ にする。 手順6.互換OLEサーバは指定しない。 手順7.アプリケーションの説明に説明を入力する。これはAMETでは使われない。 手順8.[OK]をクリックする。 フォームにコントロールを貼り付け、図1.のようにする。
図1. コントロールのプロパティを次の表のように設定する。
プロジェクトでスタートアップフォームをSub Mainにしたので、Sub Mainのモジュールを作成しなければならない。
手順2.プロパティウィンドウが表示されていないときは【表示−プロパティウィンドウ】を指定し、プロパティウィンドウを表示する。 手順3.プロパティウィンドウの Nameプロパティ を modDSMain に設定する。 手順4.modDSMainモジュールに次のコードを追加する。
6−3−1.フォームの表示と消去について VB4で作成したOLEオートメーションサーバは、OLEオートメーションによって起動されたときにはフォームを表示しない。そのため、プログラムの起動時にフォームを表示するためのコードを書かなければならない。AmetVBではSubMainの中でフォームを表示させたが、それ以外の場所でもよい。 また、プログラムの終了時にフォームが表示されていると正常に終了できないので、フォームを消去後終了しなければならない。一般的にはクラスの終了処理 Class_Terminate() の中で、フォームを消去して、終了するのがよい。 一般にVB4で作成するOLEサーバは、最低一つは公開されたクラスモジュールを持つ。AMETサーバは原則として一つだけのクラスモジュールを持つこととする。クラスモジュールは次の手順で作成する。
手順2.プロパティウィンドウで Nameプロパティ に AmetClass を設定する。 手順3.Publicプロパティ を True に設定する。 手順4.Instancingプロパティ を 1 - CreatableSingleUse にする。 AmetVBはすべてのプロパティとメソッドを実装する。 VB4でプロパティを実装するときは、クラスモジュールにPublic変数を定義するか、Property手続きを定義する。メソッドを実装するときは、Public SubかPublic Functionを定義する。 6−5−1.Public変数プロパティの実装 Public変数によるプロパティを実装するときは、クラスモジュールのdeclarationsセクションで変数の宣言をする。 AmetClassのdeclarationsセクションに次の変数宣言を記述する。
6−5−2.Property手続きによるプロパティの実装 AmetResultは他のプロパティとは異なり、リードオンリープロパティなので、手続きによるプロパティとして実装する。それには次の手順が必要である。
手順2.【挿入−プロシージャ】を選択する。 手順3.名前ボックスに AmetResult と入力する。 手順4.種類に Propertyプロシージャ を指定する。 手順5.スコープに Publicプロシージャ を指定する。 手順6.[OK]をクリックする。 手順7.Public Property Get AmetResult()とPublic Property Let AmetResult()という2つのプロパティプロシージャが生成される。これらを次のように変更する。AmetResultはリードオンリーなので、Public Property Let AmetResult()の方は何もしない。
6−5−3.AmetStartメソッドの実装
手順2.AmetClassのコード(declarationsセクション)を表示する 手順3.【挿入−プロシージャ】を選択する。 手順4.名前ボックスに AmetStart と入力する。 手順5.種類に Subプロシージャ を指定する。 手順6.スコープに Publicプロシージャ を指定する。 手順7.[OK]をクリックする。 手順8.プロシージャが生成されるので、次のように修正する。
6−5−4.AmetSetBYomi、AmetSetBHyokiメソッドの実装 AmetClassのdeclarationsセクションに次の変数宣言を追加する。
AmetStartと同様の手順でAmetSetBYomi、AmetSetBHyokiの2つのメソッドを実装し、次のように修正する。
6−5−5.クラスの初期化と終了処理 VB4のクラスモジュールには、C++のコンストラクタとデストラクタに対応して、Class_Initialize()とClass_Terminate()という関数がある。AmetClassのそれぞれの関数を次のようにする。
Class_Terminate()では、メインフォームを消去後、Endを実行してプログラムを終了させなければならない。 ATOKに通知するときは、AmetStart()で渡されたウィンドウハンドルにWM_AMET_NOTIFY (= WM_USER + 100)メッセージを送信する。 6−6−1.APIビューワー VB4でWindows のAPIを使用するためには、API関数の宣言が必要である。これはVB4に附属するAPIビューワーを使うことで生成できる。
手順2.種類コンボボックスで 関数 を選択する。 手順3.【ファイル−テキストファイルの読み込み】を選択する。 手順4.Win32api.txtを読み込む。データベースに変換するか、と聞かれるので、よく使う場合は変換しておく。 手順5.有効な項目 リストボックスから、PostMessageを検索し、[追加]をクリックする。 手順6.次に 種類コンボボックスを 定数 に変更する。 手順7.有効な項目 リストボックスから、WM_USERを検索し、[追加]をクリックする。 手順8.[コピー]をクリックする。 手順9.APIビューワーを終了する。 APIビューワーで [コピー]をクリックしたときに、APIの宣言がクリップボードに読み込まれているので、Sub Mainモジュールのdeclarationsセクションに貼り付ける。それに続けてWM_AMET_NOTIFYの定義を追加する。その結果Sub Mainモジュールのdeclarationsセクションは次のようになる。
6−6−2.イベントプロシージャの追加 フォームの[Send]ボタンをダブルクリックして、イベントプロシージャSendResultClickを生成する。プロシージャを次のように修正して、ATOKにメッセージを送信する処理を追加する。
ファイル−名前を付けてプロジェクトの保存 を選択し、プロジェクトを適当なディレクトリに保存する。プロジェクト名を変更してもプロジェクトファイルの名前はデフォルトのProject1になっているので、AmetVBに変更する。 【ファイル−EXEファイルの作成】を選択する。EXEファイルの名前を聞いてくるので、AmetVB.EXEとする。 VB4で作成したAMETサーバは、コマンドラインで /REGSERVERオプションを付けて実行することでレジストリに登録される。登録を解除するときは、/UNREGSERVERオプションを付けて実行する。 6−8−1.ProgIDについて VB4で作成したOLEサーバのProgIDは、プロジェクト名とクラス名の組み合わせになる。AmetVBの場合のProgIDはAmetVB.AmetClassである。 ATOKから呼び出せるようにするためにATOKのINIファイル(*5)に次のように登録する。
ATOK11の場合…ATOK11W.INI ATOK10の場合…ATOK10W.INI
|
![]() |
update 1998.12.2 |