Jna, Entladen der Dll aus der java-Klasse dynamisch
Habe ich bisschen gegoogelt , aber dint finden Weg zum entladen der dll mit JNA ,von der java-Klasse.
Und wie ich mich mit dll-übertragen Sie Daten aus usb-Gerät mit dieser dll habe ich entladen meine dll aus der java-Klasse, um re-benutzen Sie mein usb-Gerät mit der gleichen Klasse, ohne mein ganzes Programm.
hier ist, wie lade ich meine dll mit 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);
}
und durch
UsbSensor sdll = UsbSensor.INSTANCE;
Dll ist loded. Und hier, wie ich meine Funktion
sdll.SearchDevices();
sdll.Startacquisition();
Und jetzt nach der Verwendung dieser Funktion muss ich entladen meine dll wieder laden dll mit obigen code. um die Wiederverwendung dieser Funktion.
So, wie die unload-dll dynamisch, Mit JNA?
Du musst angemeldet sein, um einen Kommentar abzugeben.
NativeLibrary.dispose() tun sollten, was Sie suchen. NativeLibrary ist eine 1:1 Darstellung der native Bibliothek, die Sie verwenden (und intern durch Native.loadLibrary() sowieso). So
Ich hatte das gleiche Problem, aber mit Native.dispose() nicht helfen. Die Lösung zu meinem problem war dieses Frage und Antwort. Es ist im Grunde legt Instanz der native Bibliothek auf null und ruft den garbage collector.
Können Sie erstellen eine temporäre class-loader, verwenden Sie native Funktionen, die null-Referenz auf die Klasse loader und es qualifizieren sich für die GC zusammen mit Klassen /dlls geladen
ClassLoader
zum laden der Schnittstelle in Frage, ist nicht eine vorübergehendeClass
. JNA bietet auchNativeLibrary.dispose()
, aberNativeLibrary
hat andere Verwendung als das interface-mapping.