Ruby 2.3.0 リファレンスマニュアル > ライブラリ一覧 > win32oleライブラリ > WIN32OLEクラス > _invoke
_invoke(dispid, args, types) -> object | nil
[permalink][rdoc]DISPIDとパラメータの型を指定してオブジェクトのメソッドを呼び出します。
呼び出すメソッドのインターフェイスを事前に知っている場合に、DISPIDとパ ラメータの型を指定してメソッドを呼び出します。
このメソッドは引数の変換方法をプログラマが制御できるようにすることと、 COMアーリーバインディングを利用して外部プロセスサーバとのラウンドトリッ プを減らして処理速度を向上させることを目的としたものです。後者の目的に ついては、DLLの形式で型情報(TypeLib)を提供しているサーバに対してはあ まり意味を持ちません。そのため、型の高精度な制御が不要な場合は、直接メ ソッド名を指定したメソッド呼び出しを行うことを、プログラムの可読性の点 から推奨します。
excel = WIN32OLE.new('Excel.Application') excel._invoke(302, [], []) # DISPID 302は、Quitメソッド
MFCの制約により、バイト配列の型情報は通常 WIN32OLE::VARIANT::VT_VARIANTとなります。このような場合に、バイト 配列を与えるつもりで
include WIN32OLE::VARIANT obj.method(DISPID, [[0, 1, 2, 3]], [VT_VARIANT])
のように記述すると、単に32ビット整数(VT_I4)の配列が送られることになり 空間効率が低下します。
引数の最終的な型がわかっている場合は、下記の例のように型指定パラメータ には実際の型を指定してください。
include WIN32OLE::VARIANT obj.method(DISPID, [[0, 1, 2, 3]], [VT_BYREF | VT_ARRAY | VT_UI1])
なお、VB6で作成したCOMコンポーネントのパラメータに配列を与える場合は、 WIN32OLE::VARIANT::VT_BYREFの指定が必須です。
DISPIDはWIN32OLE_METHOD#dispidから取得できます。
[SEE_ALSO] WIN32OLE::VARIANT