0

我已经用谷歌搜索了一下,但是想办法从 java 类中找到使用 JNA 卸载 dll 的方法。当我使用 dll 使用这个 dll 从 USB 设备传输数据时,我必须从 java 类中卸载我的 dll,以便在不关闭我的整个程序的情况下重新使用具有相同类的我的 USB 设备。这是我如何使用 JNA 加载我的 dll

public interface UsbSensor extends Library {

        UsbSensor INSTANCE = (UsbSensor) Native.loadLibrary(
                (Platform.isWindows() ? "D:\\UsbDevice.dll" : "D:\\UsbDevice.dll"), UsbSensor.class);

        int SearchDevices();

        Pointer Startacquisition(String type);
}

并通过

 UsbSensor sdll = UsbSensor.INSTANCE; 

DLL被加载。在这里我如何使用我的功能

sdll.SearchDevices();
sdll.Startacquisition();

现在使用这些功能后,我必须再次使用上面的代码卸载我的 dll。命令重用这些功能。

那么如何使用JNA动态卸载dll呢?

4

3 回答 3

1

NativeLibrary.dispose()应该做你正在寻找的。NativeLibrary 是您正在使用的本机库的 1:1 表示(无论如何都由 Native.loadLibrary() 内部使用)。所以

  1. null Native.loadLibrary()返回的引用和
  2. 调用 NativeLibrary.dispose()
于 2013-11-18T10:13:01.103 回答
1

我有同样的问题,但使用Native.dispose()没有帮助。我的问题的解决方案是这个问题和答案。它基本上将本机库的实例设置为 null 并调用垃圾收集器。

于 2014-01-30T11:08:21.113 回答
0

您可以创建一个临时类加载器,使用本机函数,对类加载器的引用为空,它将符合 GC 以及它加载的类/dll

于 2013-11-15T11:27:52.980 回答