Jna, Unload Dll from java class dynamically

左心房为你撑大大i 提交于 2019-12-25 04:33:11

问题


I have googled bit , but dint find way to unload dll using JNA ,from java Class. And as i am using dll to transfer data from usb device using this dll, i have to unload my dll from java class in order to re-use my usb device with same class without closing my whole program. here is how i load my dll using JNA

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);
}

and by

 UsbSensor sdll = UsbSensor.INSTANCE; 

Dll is loded. And here how i use my function

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

And now after using these function I must have to unload my dll in again load dll using above code. order reuse these function.

So how to unload dll dynamically Using JNA?


回答1:


NativeLibrary.dispose() should do what you are looking for. NativeLibrary is a 1:1 representation of the native library you are using (and is used internally by Native.loadLibrary() anyway). So

  1. null the reference returned by Native.loadLibrary() and
  2. call NativeLibrary.dispose()



回答2:


I had the same issue but using Native.dispose() did not help. The solution to my problem was this question and answer. It basically sets instance of the native library to null and calls the garbage collector.




回答3:


You can create a temporary class loader, use native functions, null the reference to the class loader and it will be eligible for GC together with classes / dlls it loaded



来源:https://stackoverflow.com/questions/19999845/jna-unload-dll-from-java-class-dynamically

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!