Ruby 4.0 リファレンスマニュアル

instance method WIN32OLE_RECORD#ole_instance_variable_get

ole_instance_variable_get(name) -> objectRuby 3.0 から[permalink][rdoc][edit]

VT_RECORD OLE変数のメンバ名に対応する値を取得します。メンバ名が正しくない場合はKeyErrorが発生します。

RubyのObjectが持つメソッドと同名のメンバを持つなど、メンバに WIN32OLE_RECORD#method_missing経由で直接アクセスできない場合に利用します。

[PARAM] name:
取得するメンバ名を文字列またはシンボルで指定します。
[RETURN]
指定したメンバの値を返します。
[EXCEPTION] TypeError:
nameがStringまたはSymbolではありません。
[EXCEPTION] KeyError:
指定したメンバ名がselfに存在しません。

VB.NETのComServerプロジェクトで作成したCOMサーバの以下のComObject構造体(Object#object_idと同名のメンバを持つ)に対して、

Imports System.Runtime.InteropServices
Public Class ComClass
    Public Structure ComObject
        Public object_id As Integer
    End Structure
End Class

以下のようにすると、obj.object_idはRubyのObject#object_idを返してしまうため、代わりにole_instance_variable_getを利用します。

server = WIN32OLE.new('ComServer.ComClass')
obj = WIN32OLE_RECORD.new('ComObject', server)
# obj.object_id はRubyのObject#object_idを返してしまう
obj.ole_instance_variable_get(:object_id) # => nil

[SEE_ALSO] WIN32OLE_RECORD#method_missing, WIN32OLE_RECORD#ole_instance_variable_set