;file usejna.clj
;Class/forNameの理由
;コンパイル後までfoo.Bazは有効ではないため、
;リーダーが読み込む時点ではfoo.Bazというクラスリテラルは無効である
;REPLでもコンパイルしてから実行すること
;(compile 'foo.usejna)
;(foo -3)
(ns foo.usejna
(:gen-class))
(import '(com.sun.jna Native Library))
(defn foo [x]
(gen-interface
:name foo.Baz
:extends [com.sun.jna.Library]
:methods [[abs [int] int]])
(let [msvcrt (Native/loadLibrary "msvcrt" (Class/forName "foo.Baz"))]
(println (format "%d<abs(%d)" (.abs msvcrt x) x))))
(defn -main [& args]
(doseq []
(foo -3)))