Ruby 1.9.2 リファレンスマニュアル > ライブラリ一覧 > win32oleライブラリ > WIN32OLE_VARIANTクラス
クラスの継承リスト: WIN32OLE_VARIANT < Object < Kernel < BasicObject
OLEオートメーションの標準型のVARIANTオブジェクトをRubyで利用するための クラスです。
VARIANT型とは、型情報と値のペアから構成されるデータ型で、元はVBの形無し 変数のための構造体です。OLEオートメーションのメソッド呼び出しには汎用型 として引数にはVARIANT型を利用します。
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型を引数として与え ます。
array(dims, vt) -> WIN32OLE_VARIANT
[permalink][rdoc]配列用のVARIANTオブジェクトを生成します。
オートメーションメソッド呼び出し用の配列を生成します。なお、OLEオートメー ションの配列の次元と添え字の関係はVB型だという点に注意してください。こ れはCと逆順の並びです。
次の例は、最初の次元が3要素、次の次元が4要素の2次元配列を生成する例です。
ole_ary = WIN32OLE_VARIANT.array([3,4], WIN32OLE::VARIANT::VT_I4) ruby_ary = ole_ary.value # => [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
[SEE_ALSO] WIN32OLE_VARIANT#value, WIN32OLE::VARIANT
new(val, vartype = nil) -> WIN32OLE_VARIANT
[permalink][rdoc]指定したオブジェクトを値とするWIN32OLE_VARIANTオブジェクトを生成します。
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) # => ゴミ箱への移動ダイアログを表示
バイト配列を生成するには、以下のようにvartype引数にVT_UI1 | VT_ARRAYを 設定します。バイト配列の値のRuby表現はエンコーディングをASCII-8BITに設 定した文字列となります。
include WIN32OLE::VARIANT bytes = WIN32OLE_VARIANT.new([1,2,3,4,5], VT_UI1 | VT_ARRAY) bytes.value #=> "\x01\x02\x03\x04\x05" bytes.value.encoding #=> #<Encoding:ASCII-8BIT>
[SEE_ALSO] WIN32OLE::VARIANT
self[i...] -> object
[permalink][rdoc]配列型のWIN32OLE_VARIANTの要素を取得します。
selfは、WIN32OLE_VARIANT.arrayまたは引数に配列を指定して WIN32OLE_VARIANT.newで作成したインスタンスの必要があります。
obj = WIN32OLE_VARIANT.new([[1,2,3],[4,5,6]]) p obj[0,0] # => 1 p obj[1,0] # => 4 p obj[2,0] # => WIN32OLERuntimeError p obj[0, -1] # => WIN32OLERuntimeError
self[i...] = val
[permalink][rdoc]配列型のWIN32OLE_VARIANTの要素を設定します。
selfは、WIN32OLE_VARIANT.arrayまたは引数に配列を指定して WIN32OLE_VARIANT.newで作成したインスタンスの必要があります。
obj = WIN32OLE_VARIANT.new([[1,2,3],[4,5,6]]) obj[0,0] = 7 obj[1,0] = 8 p obj.value # => [[7,2,3], [8,5,6]] obj[2,0] = 9 # => WIN32OLERuntimeError obj[0, -1] = 9 # => WIN32OLERuntimeError
value -> object
[permalink][rdoc]値に対応するRubyオブジェクトを取得します。
obj = WIN32OLE_VARIANT.new(1, WIN32OLE::VARIANT::VT_BSTR) obj.value # => "1" (VT_BSTRを指定して生成したので、Stringオブジェクトとなる)
value=(val) -> ()
[permalink][rdoc]WIN32OLE_VARIANTの値を再設定します。
指定した値でselfを再設定します。指定値が元のVARIANT型に合わない場合は元 のVARIANT型に合うように引数を変換します。変換は、引数を一度VARIANT型に 変換してからCOMのVARIANT型変換関数(VariantChangeTypeEx)を呼び出すこと で実現します。
obj = WIN32OLE_VARIANT.new(1) # VARIANT型にWIN32OLE::VARIANT::VT_I4を設定 obj.value = 3.2 # 3.2から新たなVARIANT型を作成し、それをVT_I4に変換 p obj.value # => 3 # VT_I4に変換した結果が設定される
selfが配列型のWIN32OLE_VARIANTの場合、バイト配列かつ引数が文字列の場合 を除いてWIN32OLERuntimeErrorを通知します。配列型の場合は、 WIN32OLE_VARIANT#[]=を利用してください。
vartype -> Integer
[permalink][rdoc]selfの型情報を取得します。
型情報は、WIN32OLE::VARIANTの定数値の組み合わせです。
obj = WIN32OLE_VARIANT.new("string") obj.vartype # => 8 (WIN32OLE::VARIANT::VT_BSTR) bytes = WIN32OLE_VARIANT.new([1,2,3,4,5], VT_UI1 | VT_ARRAY) bytes.vartype # => 8209 (WIN32OLE::VARIANT::VT_ARRAY | VT_UI1)
Empty -> WIN32OLE_VARIANT
[permalink][rdoc]EMPTY型のWIN32OLE_VARIANTオブジェクトです。
このオブジェクトは、VOID型の戻り値や、値が空なことを明示しなければなら ない特殊な引数に利用します。
[SEE_ALSO] WIN32OLE::VARIANT::VT_EMPTY
Nothing -> WIN32OLE_VARIANT
[permalink][rdoc]DISPATCH型の空のオブジェクトです。
[SEE_ALSO] WIN32OLE::VARIANT::VT_DISPATCH
Null -> WIN32OLE_VARIANT
[permalink][rdoc]NULL型のWIN32OLE_VARIANTオブジェクトです。
このオブジェクトは、ADOなどのデータベースインターフェイスでNULLを指定す るのに利用可能です。
[SEE_ALSO] WIN32OLE::VARIANT::VT_NULL