簡體   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