[英]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()在內部使用)。 所以
我有同樣的問題,但使用Native.dispose()沒有幫助。 我的問題的解決方案是這個問題和答案 。 它基本上將本機庫的實例設置為null並調用垃圾收集器。
你可以創建一個臨時的類加載器,使用本機函數,null對類加載器的引用,它將與它加載的類/ dll一起符合GC的條件
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.