助田です。
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>