助田です。

In message "[ruby-ext:01492] win32ole"
    on 01/01/10, "岡本" <okamoto / cse.co.jp> writes:

> Cによる拡張ライブラリ作りの練習として、WIN32OLEに個人的に欲しいメソッドを
> 追加してみました。

> ・OLEオブジェクトのメソッドを列挙するもの
> WIN32OLE#ole_methods( flag = WIN32OLE::APPEND_ALL )
> WIN32OLE#ole_get_methods( flag = WIN32OLE::APPEND_NONE )
> WIN32OLE#ole_put_methods( flag = WIN32OLE::APPEND_NONE )
> WIN32OLE#ole_func_methods( flag = WIN32OLE::APPEND_NONE )

こういうのが欲しい人は結構いると思いますので取り込みます。

> ・OLEオブジェクトやそのメソッドの情報を適当に取ってくるもの
> WIN32OLE3#ole_obj_help              #OLEオブジェクトの情報を取ってくる
> WIN32OLE3#ole_method_help( name )   #OLEオブジェクトのメソッドの情報を取ってくる
> WIN32OLE3#ole_method( name )        #ole_method_helpの別名

これも取り込む方向で考えます。

> ole_method_bindにOLEのメソッド名を渡して呼ぶと、同名のRubyのメソッドを定義します。
> (ただし先頭小文字化したもの)
> そのメソッドでは ole_method_bind であらかじめ求めておいたディスパッチIDで、
> (ole_invoke_byidを使って)OLEのメソッドを呼びます。
> ole_methods_bindは全てのOLEのメソッド名に対して、同様のことを行ないます。
> 
> 定義はできても、呼び出してみると上手く機能しない場合が多いのが問題ですが。

機能しないっていわれると取り込みづらいのですけど、
どう駄目なんでしょうか?

> あとついでに、ライブラリ内で include Enumerable しておいて欲しいと思っていたので、そのようにしてみま
> した。

えーと、これは、必ずしもWIN32OLEオブジェクトのeachメソッドが
ちゃんと動くとは限らない(IEnum インターフェースを持つとは
限らない)ということとEnumerableをincludeして破綻するケースが
無いかどうか確信が持てなかったので、わざとincludeしてませんでした。
問題ないですかねえ。

  助田 雅紀 <CQN02273 / nifty.ne.jp>