我最近在Clojure看了很多,我一直在想它是否适合我下一个项目的范围.不幸的是,它涉及编写不可移植的代码,我需要访问Win32 API.
我偶然发现了Java Native Access库,可以轻松地将带有C接口的本机库映射到Java.它甚至提供了一个(空的)包装器Kernel32.dll作为教程中的一个例子!
但是,我有点难过将例子从Java翻译成Clojure.我知道我可以实现接口和实现类,但是我怎样才能简单地扩展接口?
感谢Joost发布的链接,这是一个最小的工作示例:
(import (com.sun.jna Library Native Platform Pointer))
(import (com.sun.jna.win32 StdCallLibrary))
(def K32
     (gen-interface
      :name Kernel32
      :extends [com.sun.jna.win32.StdCallLibrary]
      :methods [[GetCurrentProcess [] com.sun.jna.Pointer]]))
(defn load-native-library [name interface]
  (cast interface (com.sun.jna.Native/loadLibrary name interface)))
(def k32 (load-native-library "kernel32" K32))
(println (.GetCurrentProcess k32))
输出#<Pointer native@0xffffffff>,如预期!
| 归档时间: | 
 | 
| 查看次数: | 1135 次 | 
| 最近记录: |