------------------------------------- VBでSHIORIを作るサンプル V0.02 ------------------------------------- その名の通り、VBで偽AISHIORIを作るためのサンプルです。 アプローチとしては、VBの常駐プログラムと、インターフェースを行う shiori.dllを作成して、メインのAIの部分を全てVBでコーディングして しまおうという、不埒な企画です。 「どれどれ」と思われた方は、VBのソースのほうを見てください。 なおこのサンプルを使い、実際に偽AIを作成するのも配布するのも自由に してかまわないです。DLLに関してもそのまま使う、改変してコンパイルして 配布するなど好きにしてください。 もちろん、改造後の責任はあなたの元に。 なお、shiori4vb.dllに関しては、改変なしに使用する限りにおいてサポートは します。提案や要望などありましたらお知らせください。 もちろん改造後のコードを送りつけて「こんな風に改造しました」といった形の 提案もアリです。 あと、決り文句。 「このソフトウエアは無保証です。これを使用したことによって生じたいかなる 損害にも作者は一切の責務を負わないこととします」 V0.02追加。 VBのモジュールも、DLLとの通信部分に関しては、その部分(関数単位)を 改変していない限りにおいてはサポートいたします。バグ等のご報告お待ち しております。 V0.02更新部分。 ・二重起動対策、及び複数のdllからのアクセス対策。常に1対1になるよう にしました。→×なってません。 ・VB側、何かに最低限の反応を返すため大幅にコード追加。 分析部分の作成の参考にしてください。 ・リクエストを表示するボックス追加。 SHIORI通信モニタとしてご使用いただけます。 Produced by 菖蒲 http://www10.tok2.com/home/ayame/ --------------------------------------------------------------------------- 使い方とか(追加 V0.02) まずはテスト用に「何か」のシェルを用意して、「何か」のghostディレクトリに インストールしてください。 そのディレクトリに以下のファイルをコピーします。 shiori4vb.dll alias.txt なお、既にalias.txtがある場合は、上書きせずに、以下の行を付け加えてください。 shiori,shiori4vb.dll 以上で本体側の準備は完了です。 次に、VBの開発環境からvbserverディレクトリのプロジェクトを開いてください。 このプロジェクトにはDLLとの通信部分が既にコーディングされています。 この部分は良く判らない方は変更しないで下さい。 まずは、デバッグモードでこれを実行した状態で、「何か」を起動して先ほど用意 したゴーストに切り替えて見てください。 設定が上手く行っていれば、実行中のフォームの上のテキストボックスに本体からの requestが表示されます。 なお、「何か」の実行中にVBのプログラムを止めてもdllがそれなりのステータス コードを返すようにしてありますので、「何か」を起動したまま、コードを直したり することも出来ます。 あとは、応答をVBでプログラムするだけです。 ご健闘をお祈りします。 --------------------------------------------------------------------------- VB−SHIORI資料。 通信の仕方ですが、DirectSSTPの手法を使います。 但し、DLLにウィンドウハンドルを持たせるのはちょっとアレなので、 応答を受け取る方法はちょっと変わっています。 以下にこのSHIORIサーバの仕様を記述します。 SHIORIサーバというのはVBで作られた常駐プログラムのことです。 1.FMOの作成とHWNDの登録。 SHIORIサーバは"Shiori"というFileMappingObjectに通信用HWNDを登録しなくては いけません。登録の形式は「何か」のFMO"Sakura"と似通っています。 [MD5値].version[1]SHIORI/2.2[13][10] [MD5値].hwnd[1]122334467[13][10] これで判るでしょうか。[1]はバイト値1です。[13][10]も同様。 2.shiori4vb.dllとの通信。 2.1.shiori4vb.dllとは shiori4vb.dllとは、偽AI shiori.dllの振りをしてVB-SHIORIとのインターフェース をするモジュールです。こちらはVCで作られています。 shiori4vb.dllは本体(「何か」とかSSPとか)からloadを呼ばれたときに、 FMO("Shiori")を開いて通信すべきSHIORIサーバのウィンドウハンドルを取得します。 (本来loadではSHIORIサーバを起動する処理もすべきですがまだ実装していません) 2.2.実際の通信。 SHIORIサーバの通信用のウインドウは実はテキストボックスです。 このテキストボックスを使ってクライアントとの通信を実現します。 さて、本体側からリクエストを貰ったshiori4vb.dllはWM_COPYDATAメッセージを SHIORIサーバの通信用ウインドウ、すなわちテキストボックスに送ってきます。 SHIORIサーバはこのメッセージを受け取って結果をまた同じテキストボックスに 返さなければいけません。 ここではサブクラス化という手法を使ってVBのコード内でメッセージを処理 しています。この処理プロシージャ内からShioriの核となる文字列処理ルーチンを 呼ぶことになります。 処理ルーチンが返した応答文字列は即座にテキストボックスにセットされます。 この後、メッセージ処理処理プロシージャは戻り値をDLLに返します。 2.3.dllが受け取った後。 shiori4vb.dllは戻り値を受け取るとすぐにWM_GETTEXTをSHIORIサーバのテキスト ボックスに送り、その文字列を取得します。 取得した後、正しく取得したということを伝えるため、今度はWM_SETTEXTが 送られテキストがクリアされます。 その後、DLLは「何か」本体にその文字列をそのまま返します。 以上がSHIORIサーバとshiori4vb.dllの1回の通信シーケンスです。 VBのデバッグについて。 デバッグ中に強制終了するとFMOが消えなくなることがあります。 そういうときは全てを保存したあと、VB自体を再起動するとFMOが 消えてくれます。 文字コード 文字コードは「規定のコードページ」になるとVBのドキュメントに書いてあります。 THANKS このプログラムは、かないん氏(http://www.creaters.net/~kanain/)の 「Visual C++&Visual Basicで”何か”のDirect SSTPを使うサンプルソースコード」 を大いに参考にしています。 かないん氏に感謝。 -------------------- 菖蒲 2001.5.27 ayame@post.tok2.com