プログラミング

PHPでWin32APIを呼び出す

2007年2月13日

 つい最近まで知らなかったのだが、PHPをWindowsで使用すると、Win32APIの直接呼出しや、COMオブジェクトの作成が出来るらしい。

 ゆくゆくは、Nucleusを用いて自宅サーバを管理しようと考えている。例えば、WinLIRCを使って家電を制御するとか、Windows MCEのようなことをさせるとか。

 そういった場合に、Win32API に接続できると色々と複雑な制御が出来るはず。

 いまのところ、一番簡単なやり方はw32api_register_function()関数を用いるもの。しかし、この方法はPHP-5.1.0以降ではPECLレポジトリに移動されていて、PHPに直接バンドルされなくなっている模様。しかも、

警告
この拡張モジュールは、 実験的 なものです。この拡張モジュールの動作・関数名・その他ドキュメントに書かれている事項は、予告なく、将来的な PHP のリリースにおいて変更される可能性があります。このモジュールは自己責任で使用してください。

ということらしい。将来的に使えなくなる可能性もあるかもしれない。

 一方、COMオブジェクトの呼び出しの方は、正式にサポートされている様子。Zend と Microsoft が手を組んだこともあって、こちらのサポートはしっかりしているだろうと思われる。だとすると、DynaWrapもしくはSFC-miniを用いてWin32APIを呼び出すということが考えられる。

 少し調べてみた。結論としては、現段階ではこれは、DynaWrapでもSFC-miniでも出来ない。理由は、PHPの関数の呼び出しがすべてアルファベットの小文字に変換されてしまうためで、APIの呼び出しをしようとすると『そんな命令はありません』というエラーが返されてしまう。

 これについては、次期バージョンのSFC-miniで対応する予定。出来れば、構造体を引数として渡すAPIにも対応できるようにしたい(これができないと、ただのおもちゃになってしまう)。コールバック関数について対応できるかどうかは、今のところ不明。簡単に対応できるかもしれないし、手間取るかもしれない。最終的には、COMのイベント呼び出しを使えば出来ることはわかっているのだが、COMのこの部分のハッキングがまだ終了していないので、どうなるかは分からない。

コメント

コメントはありません

コメント送信