0

少しグーグルで検索しましたが、JavaクラスからJNAを使用してdllをアンロードする方法が見つかりません。そして、このdllを使用してUSBデバイスからデータを転送するためにdllを使用しているため、プログラム全体を閉じずに同じクラスでUSBデバイスを再利用するために、JavaクラスからDLLをアンロードする必要があります。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を再度ロードする必要があります。これらの機能を再利用してください。

では、JNA を使用して動的に dll をアンロードする方法は?

4

3 に答える 3

1

NativeLibrary.dispose()は、探していることを行う必要があります。NativeLibrary は、使用しているネイティブ ライブラリの 1:1 表現です (いずれにせよ、Native.loadLibrary() によって内部的に使用されます)。そう

  1. null Native.loadLibrary()によって返された参照と
  2. NativeLibrary.dispose() を呼び出す
于 2013-11-18T10:13:01.103 に答える
1

私は同じ問題を抱えていましたが、Native.dispose()を使用しても役に立ちませんでした。私の問題の解決策は、この質問と回答でした。基本的にネイティブ ライブラリのインスタンスを null に設定し、ガベージ コレクターを呼び出します。

于 2014-01-30T11:08:21.113 に答える