[Ruby] Win32OLE と Ruby の型マップ情報
[ruby-talk:339117]からの一連のスレッドを読んでいてふと思ったのだが、
Ruby の型と Win32OLEの型の対応づけの情報を得られるメソッドがあると嬉しい場合ってどのくらいあるだろうか?
でもって、場合によっては動的にその対応づけを変更できるというのはどうだろうか?
例えば、Win32OLE の VT_DATE は、Ruby の String と対応づいているんだけど、
自己責任で、 Ruby の Time 型と対応づけを変更できるとか
Ruby の Bignum は、WIN32OLE の VT_R8 に対応づけているんだけど、
自己責任で、 Win32OLE の VT_I4 にできたり、Win32OLE の VT_I8 に対応づけられるとか。
もちろん、対応づけは、Win32OLE が変換方法をあらかじめわかっているものに限定されます。
対応づけがわからない場合は、ブロックで指定してもらうとか。
えーと、メソッド名は、
(1) ole2ruby_mapping_info()
現在設定されているWin32OLE から Ruby へのマッピングの情報をHASHで返す。
Ex: {VT_DATE => String, VT_BSTR => String, ...}
(2) ruby2ole_mapping_info()
現在設定されているRuby から Win32OLE へのマッピングの情報がHASHで返す。
Ex: {String => VT_BSTR, Time => VT_DATE, ...}
(3) set_ole2ruby_mapping(otype, rtype)
このメソッドが呼び出された後は、常に Win32OLE の otype を Ruby の
rtype に変換する。
ただし変換できるRubyの型は、Win32OLEが変換方法をあらかじめ知っている型に
限定される。
知らない型が指定された場合は、例外。
(4) ole2ruby_available_mapping_info()
Win32OLE があらかじめ知っているWin32OLEからRubyへのマッピングの情報をHASHで返す。
Ex: {VT_DATE =>[String, Time], VT_BSTR => [String],...}
(5) set_ruby2ole_mapping(rtype, otype)
このメソッドが呼び出された後は、常に Ruby の rtype を Win32OLEの
otypeに変換する。
ただし変換できるものは、Win32OLEが変換方法をあらかじめ知っている型に
限定される。
知らない型が指定された場合は、例外。
(6) ruby2ole_available_mapping_info()
Win32OLE があらかじめ知っているRubyからWin32OLEへのマッピングの情報をHASHで返す。
Ex: {Bignum => [VT_I8, VT_I4, VT_R8], String => [VT_BSTR], ...}
とか。
(3') set_ole2ruby_mapping(otype, rtype=nil){|robj| ...}
このメソッドが呼び出された後は、常に Win32OLE の otype を Ruby の
rtype に変換する。
ただし、rtype が nil のときは、ブロックで変換方法を指定する必要がある。
robj は、otype からデフォルトの動作で変換された Ruby のオブジェクト。
(5') set_ruby2ole_mapping(rtype, otype=nil){|robj| ...}
このメソッドが呼び出された後は、常に Ruby の rtype を Win32OLEの
otypeに変換する。
ただし、otype が nil のときは、ブロックで変換方法を指定する必要がある。
うーむ...。 (3') や (5') は、ちゃんと使えるような機能が提供できるのかどうか、
そこまでやる意味があるのかどうかもよくわからない...。(1) から (6) までは、
やったとしても (3') や (5') は保留かな。
| 固定リンク
この記事へのコメントは終了しました。
コメント