names=ARGV
visibility=public
kind=defined

--- ARGV -> [object]

直前のメソッド呼び出しの引数を格納した配列です。

OLEオートメーションでは呼び出し先が引数に対して値を設定できます。しかし、
Rubyのメソッド引数は値のみを取るため、そのままでは呼び出し先が設定した
値を参照できません。このような場合、ARGVを参照することで呼び出し先の設
定値を参照できます。

以下のリストは、VBで開発したオブジェクトのメソッド呼び出しを例としてい
ます。このメソッド（Accm）は、第1引数で指定した演算を第2引数と第3引数に
適用し、結果を第2引数に設定します。

  ' VB (OLE Automation server)
  Public Sub Accm(ByVal Operator, ByRef Accumulator, ByVal Operand)
      If Operator = "*" Then
          Accmulator = Accmulator * Operand
      Else If Operator = "+" Then
          Accmulator = Accmulator + Operand
      End If
  End Sub
 
  # Ruby
  x = 10
  obj.Accm '*', x, 11
  p x               # => 10 …… 呼び出しによって影響を受けない
  p WIN32OLE::ARGV  # => ['*', 110, 11] …… 結果はARGVの対応する引数に反映される
  obj.Accm '+', 10, 11
  p WIN32OLE::ARGV  # => ['+', 21, 11]

直前のメソッド呼び出しが例外となった場合、ARGVの設定内容は呼び出し前の
状態が保たれます。つまり、WIN32OLE自身がARGVの内容を消去するのは、メソッ
ド呼び出しに成功した場合のみです。このため最後のメソッド呼び出しが引数
にオブジェクトを返すタイプのメソッドだった場合、GCにオブジェクトを回収
させるために、呼び出し側でARGVを消去してください。

  ' VB (OLE Automation server)
  Public Sub GetInterface(ByRef obj)
      Set Obj = New OleObject
  End Sub

  # Ruby
  obj.GetInterface nil   # 引数の数を合わせるためダミー引数を指定
  WIN32OLE::ARGV.clear   # 通常は、後続のメソッド呼び出しによって消去される

