2007/12/30

Common Lisp で OLE ライブラリを作りはじめる

Common Lisp の OLE ライブラリ(Ruby の Win32OLE みたいなの)がなかったので作りはじめてみました。
ここ数日せっせとハックしてます。

自宅には Windows マシンがないので OS インストールからでした。
Linux マシンの qemu/kvm に Vista をインストール。
ついで Cygwin, Meadow, SBCL, SLIME, VS2008C++Express, WIN32SDK をインストール。

そしてようやく開発開始です。
C ではコードを書かず、cffi を使って Lisp のコードだけで作成する方針でいきます。
VARIANT の union にやられながら、とりあず BOOL, BST, IDispatch だけを実装して、次のコードが動くようになりました。
IE でページを表示してタイトルを取得しています。
Excel のサンプルを作りたいところですが、Excel を持っていないので。。。とても古いバージョンがどっかにあったかなぁ。

(let ((ie (create-instance "InternetExplorer.Application")))
(property ie :visible t)
(invoke ie :navigate "http://sbcl.sourceforge.net/")
(loop while (property ie :busy)
do (sleep 0.5))
(let ((document (property ie :document)))
(format t "document title is \"~a\".~%" (property document :title)))
(sleep 3)
(invoke ie :quit))

やっぱり名前は cl-win32ole ですよね。

4 件のコメント:

匿名 さんのコメント...

素晴らしいです。実現を楽しみにしています。

Yoshinori Tahara さんのコメント...

コメントありがとうございます。はげみになります。

fanannan さんのコメント...

できあがったら、公開していただけると嬉しいところです。本当はお手伝いできるといいんですが、今はそこまでできなくて申し訳ないんですが・・・・。

Yoshinori Tahara さんのコメント...

ちゃっとできあがったら common-lisp.net にあげたいな、と思っています。
でも、とりあえず Googel code にあげようかなぁ。
いまでもなんとか動かないことはないので。。。

> 本当はお手伝いできるといいんですが、今はそこまでできなくて申し訳ないんですが・・・・。

いえいえ。
こんなふうにコメントをくださるだけでも嬉しいです。