Archive for 1月 19th, 2013

  1. Hello, COM(JRuby) World!

    Posted on 1月 19th, 2013 by cx20

    COM(JRuby)

    COM(Component Object Model)はマイクロソフトの提唱するプログラム部品の仕様である。
    COM を用いて開発された部品であれば言語を問わず利用することができる。
    JRuby 自身には、COM を呼び出す機能を持っていないが、別途ライブラリを経由することで呼び出すことが可能である。
    以下は JRuby より JACOB(JAVA-COM Bridge) ライブラリを使用した COM クライアントの例となっている。

    ソースコード

    require 'java'
    require 'jacob.jar'
     
    import 'com.jacob.com.Variant'
    import 'com.jacob.activeX.ActiveXComponent'
     
    @shell = ActiveXComponent.new("Shell.Application")
    @hwnd = Variant.new(0)
    @title = Variant.new("Hello, COM(JACOB) World!")
    @option = Variant.new(0)
    @rootFolder = Variant.new(36)
    @params = [ @hwnd, @title, @option, @rootFolder ]
    @folder = @shell.invoke( "BrowseForFolder", @params )

    実行方法

    C:¥> jruby Hello.rb

    実行結果

    +----------------------------------------+
    |Browse For Folder                    [X]|
    +----------------------------------------+
    | Hello, COM(JACOB) Wolrd!               |
    |                                        |
    | +------------------------------------+ |
    | |[Windows]                           | |
    | | +[addins]                          | |
    | | +[AppCompat]                       | |
    | | +[AppPatch]                        | |
    | | +[assembly]                        | |
    | |     :                              | |
    | |     :                              | |
    | |     :                              | |
    | +------------------------------------+ |
    | [Make New Folder]    [  OK  ] [Cancel] |
    +----------------------------------------+