在花了很多时间学习Python通过Jython将一系列基于DLL的函数实现到Java中之后,我忘记阅读Jython的文档,而缺少ctypes支持使我的大多数代码无用。

我不想使用JNI

我正在尝试使用的HALAPI从pcshll32.dll中访问某些功能。

我确实设法使其几乎可以毫无问题地与Python一起使用,在网络上找到很多文档和食谱确实非常容易。

现在,我偶然发现了JNA,并且遇到了很多麻烦。我几乎找不到有关它的信息,特别是当我尝试访问非标准DLL时。

据我了解,我需要编写一个pcshll32.class来作为接口-就像User32.class似乎是一个到User32.dll的接口(或者我应该称其为代理...)。

好吧,这就是我阅读this后发生的事情。

那么...我如何导入外部DLL?可能吗?我需要编写接口/代理吗?那里有样品吗?

最佳答案

您应该这样做:

public interface PcShll32 extends StdCallLibrary { //StdCallLibrary is for Windows functions

    PcShll32 INSTANCE = (PcShll32) Native.loadLibrary(
                   "pcshll32", PcShll32.class, W32APIOptions.DEFAULT_OPTIONS); //Options are for Win32API

    // your methods
}


当然,您必须为JNA提供此外部库。

对我来说,最好的解释是the source code

10-08 19:57