Archive for 1月 21st, 2013

  1. Hello, COM(Clojure) World!

    Posted on 1月 21st, 2013 by cx20

    COM(Clojure)

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

    ソースコード

    (import 
      (com.jacob.com Variant)
      (com.jacob.activeX ActiveXComponent))
     
    (def shell
       (ActiveXComponent. "Shell.Application"))
     
    (def hwnd
       (Variant. 0))
     
    (def title
       (Variant. "Hello, COM(JACOB) World!"))
     
    (def option
       (Variant. 0))
     
    (def rootFolder
       (Variant. 36))
     
    (def params
       (into-array [hwnd title option rootFolder]))
     
    (def folder 
       (.invoke shell "BrowseForFolder" params ))

    実行方法

    C:¥> SET CLASSPATH=jacob.jar;.;%CLASSPATH%
    C:¥> clojure Hello.clj

    実行結果

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