岡本です。
レスが遅くなってすいません。

> > ・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_method_bindで定義したメソッドを呼び出してみると、メソッドによっては
"コレクションをサポートしません"
などのメッセージとともに例外(RuntimeError)が発生するのです。

原因の一つは引数の数を間違えて設定していることで、
ole_invoke_byidの関数中の
    cNamedArgs = 0;
    op.dp.cArgs = argc - 1;
    op.pNamedArgs = ALLOCA_N(OLECHAR*, cNamedArgs + 1);
    if (op.dp.cArgs > 0) {
        op.dp.rgvarg  = ALLOCA_N(VARIANTARG, op.dp.cArgs);
    }
というところの
    op.dp.cArgs = argc - 1;
を
    op.dp.cArgs = argc - 2;
に変えればいくらか改善されることがわかりました。

しかしこれでも property_put  系のメソッドでは
"パラメータが見つかりません。"
と言われてしまいます。

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

なるほど、そういう訳だったんですか。

Enumerable っぽくないオブジェクトに対しては、ユーザーは each も collect も
Enumerable っぽいメソッドは呼ばないだろう、ていう態度では駄目ですかね。