繁体   English   中英

Jna,动态地从java类卸载Dll

[英]Jna, Unload Dll from java class dynamically

我有谷歌搜索,但dint找到方法从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加载DLL。 命令重用这些功能。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM