プログラマ ずんべ の日記

zunbe

プログラマ ずんべ の日記
プログラマ ずんべ の日記

探し物は見つかりましたか? サイト内検索を試してください。

「市民サイクルパラダイス in 日間賀島」にエントリー 「市民サイクルパラダイス in 日間賀島」にエントリー 五味太郎 絵本ワンダーランド2007 in 名古屋 五味太郎 絵本ワンダーランド2007 in 名古屋

2007/04/14

【技術開発】IIS で KAKASI.EXE を実行する(2)

このエピソードの続き。

 2007/02/02 IIS で KAKASI.EXE を実行する

IIS上で標準入出力のパイプライン処理をできる方法を探ってみた。

IIS上でパイプラインの処理ができない理由は、IISがプロセスを生成する時にデフォルトでコンソールを作成しないためで、有効な STDIN、STDOUT、STDERR を使用できず、パイプラインによる処理が構成できない。

 [IIS]HOWTO: CGI プロセスから子コンソールを作成する方法

この資料によれば、解決方法として、IISの設定を変更するか、Win32 API の AllocConsole() を呼び出してコンソールを作成する方法が紹介されている。
現実的な問題として、稼動中のIISの設定を変更する事はできないし、IISの設定を変更することが望ましいとは思えないので、前者の方法は採用しにくい。
と、いう事で、後者の方法を採用し、KAKASI のソースに手を入れて IIS上でパイプラインを組めるようにしてみる事にする。

まず、KAKSI のソースをコンパイルするために、Windows に cygwin をインストールする。
cygwin 上で、KAKSI のソースを展開してコンパイルすれば、普通に KAKSI.EXE をビルドできる。

今回は、Win32 API の AllocConsole() をリンクする必要があるので、cygwin のインストーラから、libs の w32api をインストールしておく。
これで、cygwin 上のコンパイラで、Win32 API を利用できるようになる。

次に、ソースコードを修正する。
src/kakasi.c をエディタで編集する。

 (1).windows.h を include する。
 (2).AllocConsole() を呼び出す。

次に、configure を実行し、コンパイル環境を作成する。
この時、いくつか調整が必要になる。

 (1).lkernel32.lib をリンクする必要がある。
   変数 LIBS に -lkernel32 を追加する。

 (2).cygwin環境ではない環境で実行する必要がある。
   変数 CFLAGS に -mno-cygwin を追加する。

と、いう事で、以下の様に変数を指定して configure し、ビルドする。

 $ LIBS=-lkernel32 CFLAGS=-mno-cygwin ./configure
 $ make

WshShell の Exec() で、作成した KAKASI.EXE を呼び出してみる。

 Set objShell = Server.CreateObject("WScript.Shell")
 Set objExec = objShell.Exec("KAKASI.EXE -w")
 Call objExec.stdin.Write("入力")
 Call objExec.stdin.Close()
 o = objExec.stdout.ReadAll()

成功!
変数 o に、わかち書きされた出力を得る事ができた。

う~ん、奥が深い。




このエピソードはいかがでしたか?

投稿者 zunbe : 2007/04/14 10:05:19


トラックバック 〔http://blog.zunbe.com/mt/mt-tb.cgi/619〕

コメント

もしかして、未だにIIS4が本番で動作しているということ?

う~ん、私はその方が怖い・・・。

投稿者 チャーリー栗原 : 2007/04/15 15:06:22

●チャーリー栗原さん

> もしかして、未だにIIS4が本番で動作しているということ?

ターゲットはIIS5です。
Windows 2000 Server は、未だバリバリの現役ですから。

おそらく「IIS4が本番で動作?」というのは、資料の「この資料は以下の製品について記述したものです。」の記述に反応しての事だと思いますが、マイクロソフトのナレッジベースは、マイクロソフトが問題(or仕様)を認識した時点での記述で、それ以降はメンテナンスされる事はほとんどありませんから、IIS5、IIS6とバージョンが上がっても、資料に記載されている内容は、一般的に更新されないと思います。

試してはいませんが、おそらく、IIS6でもおそらく状況は同じではないかと思います。
資料でも、マイクロソフトが「ソフトウェアの問題」として認識しているのではなく、「ソフトウェアの仕様」として説明していますから、この仕様は現在のIIS6でも変更されていないのではないかと思います。

投稿者 ずんべ : 2007/04/15 23:45:05

なるほど、勉強になりました。
まあ、標準入出力は後から無理矢理追加したようなものだから、仕方がないですね。Windowsですし。

私は仕事ではIIS6しか縁がないです・・・。

投稿者 チャーリー栗原 : 2007/04/19 15:36:54

●チャーリー栗原さん

そうですね、Windows はビジュアルな操作性を重視したOSですから、コマンドラインが弱いのは、まぁ、当然と言えば、当然なんですよね。
開発サイドとしては、ちょっと不便だな、とは感じますけれど、これは Windows の特徴ですから、そういうものと割り切って、その特徴に合わせて開発するしかないですよね。(^^;

がんばります。

投稿者 ずんべ : 2007/04/20 04:29:15


コメントしてください






保存しますか?


スパム対策:
この入力フィールドに「717」と入力してください。


プログラマ ずんべ の日記:ずばヒット アマゾン