Jna,动态地从java类卸载Dll

时间:2013-11-15 11:17:31

标签: java dll jna

我已经google了一下,但是dint找到了使用JNA从java Class卸载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来卸载我的dll。命令重用这些功能。

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

3 个答案:

答案 0 :(得分:1)

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

  1. null Native.loadLibrary()
  2. 返回的引用
  3. 调用NativeLibrary.dispose()

答案 1 :(得分:1)

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

答案 2 :(得分:0)

你可以创建一个临时的类加载器,使用本机函数,null对类加载器的引用,它将与它加载的类/ dll一起符合GC的条件