我已经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?
答案 0 :(得分:1)
NativeLibrary.dispose()应该做你想要的。 NativeLibrary是您正在使用的本机库的1:1表示(并且无论如何都由Native.loadLibrary()在内部使用)。所以
答案 1 :(得分:1)
我遇到了同样的问题,但使用Native.dispose()没有帮助。我的问题的解决方案是question and answer。它基本上将本机库的实例设置为null并调用垃圾收集器。
答案 2 :(得分:0)
你可以创建一个临时的类加载器,使用本机函数,null对类加载器的引用,它将与它加载的类/ dll一起符合GC的条件