山本です。

>情報ありがとうございます。
>ざっと目を通してみました。
>どうも、参照渡しのやり方が悪いんじゃなくて、参照渡しでやっている限り
>InvokeVerbには受けつけてもらえないってことになりそうですねえ。 

そうみたいですね。なぜこの関数だけそうなのか、よくわかりませんが・・・
試しに C++Builder5 で 

  HRESULT _stdcall test([in, optional] VARIANT val );

というメソッドを持つコントロールを作って ruby から呼んでみましたが、
問題なく実行されました。

># どうするか、考えがまとまらない...。

本来は、パラメータが [in] なら値渡し、[out] なら参照渡しするのが
正しいやり方なんだと思います。[in] か [out] か、ruby側(レイトバインディング)で
知る方法がないのが問題だと・・・・

となると、VBScript みたいにユーザに参照渡しと値渡しを区別させるとか
(VBScript では括弧で囲むと値渡し、囲まないと参照渡しになるらしい)
JScript のようにすべて値渡しするとか・・・でもこれだと動かないものが
あったんですよね。動かないというのは、やっぱり [out] に値渡しだと
エラーになるとか、値が得られないとか、そういうことでしょうか?

# http://blogs.msdn.com/ericlippert/archive/2003/09/29/53117.aspx に、
# VBScript で [in,out] に渡すとメモリリークするとか、恐ろしいことが
# 書いてありましたが・・・なんか、結構深そうな話ですね。