type=class
superclass=Object
included=
extended=
dynamically_included=
dynamically_extended=
library=win32ole
aliases=
aliasof=

OLEオートメーションの標準型のVARIANTオブジェクトをRubyで利用するための
クラスです。

VARIANT型とは、型情報と値のペアから構成されるデータ型で、元はVBの形無し
変数のための構造体です。OLEオートメーションのメソッド呼び出しには汎用型
として引数にはVARIANT型を利用します。

 * 型情報は、[[m:WIN32OLE_VARIANT#vartype]]で取得できます。
 * 値は、[[m:WIN32OLE_VARIANT#value]]で取得できます。

OLEオートメーションのメソッド呼び出し規約では、引数はVARIANT型の配列と
して定義されています。

この規約に対して、WIN32OLEでは、VARIANT型の値に対する参照を引数配列の各
要素に設定します。この実装は、ほとんどのOLEオートメーションサーバで正し
く処理されます。

しかし、一部のOLEオートメーションサーバは、引数配列の要素にVARIANT型の
値そのものを要求します。この場合、WIN32OLEの実装は正しく処理されません。

WIN32OLE_VARIANTオブジェクトを利用すると、このようなOLEオートメーション
サーバのメソッド呼び出しに対して、VARIANT型の値を引数配列に設定すること
をWIN32OLEへ指示できます。

なお、WIN32OLE_VARIANTを利用する必要の有無は、呼び出し対象のOLEオートメー
ションサーバの仕様または実装に依存します。

=== サンプルコード

   shell = WIN32OLE.new('Shell.Application')
   folder = shell.NameSpace('C:\\Users\\Public\\Documents')
   item = folder.ParseName('test.txt')
   v = WIN32OLE_VARIANT.new('Delete')
   item.invokeVerb(v)     # => ゴミ箱への移動ダイアログを表示

上記サンプルの最後の行を

   item.invokeVerb('Delete')

とすると、FolderItemオブジェクトは引数を認識できず、既定の動作として
Openを実行します。

プログラムの見た目と異なり、後者のコードに対してWIN32OLEは、'Delete'と
いう文字列を格納したVARIANT型への参照を引数として与えるためです。それに
対して前者では、'Delete'という文字列を格納したVARIANT型を引数として与え
ます。
