C で DLL をプログラミングしました。最初の関数は、新しいデータが利用可能になったときに呼び出されるコールバック関数のポインターを送信します。
そこで、JNA を使用してこの関数をラップします。
アプリの終了を回避するために、標準入力からのデータを待機する InputStreamReader を使用します。新しいデータが利用可能になると、コールバックが呼び出され、データがコンソールに出力されます。
しかし、ウィンドウを閉じる前にプログラムの終了を回避するために JFrame を使用すると、正しく動作しません。実際、JFrame ウィンドウのサイズを変更しないと、コールバックが約 30 回呼び出され、その後は何も呼び出されません (新しいデータが利用可能であっても)。ウィンドウのサイズを変更すると、コールバックが呼び出されない場合 (新しいデータが利用可能であっても)。
助けてください。
ありがとう
編集:これは私の主な方法です。
パッケージjsigmausblib;
import com.sun.jna.Native;
import com.sun.jna.Pointer;
import javax.swing.JFrame;
public class JSigmaUSBLib {
public static void main(String[] args) {
NativeSigmaUSBLibInterface nsuli = (NativeSigmaUSBLibInterface) Native.loadLibrary("SigmaUSBLib1.0", NativeSigmaUSBLibInterface.class);
ReadCallback rc = new ReadCallback() {
@Override
public void callbackFunction(Pointer readData, byte len) {
System.out.println("ok"+readData.getByte(0));
}
};
SigmaUSBLibConfigStruct.ByValue config = new SigmaUSBLibConfigStruct.ByValue();
nsuli.SigmaUSBLibInit(rc , config);
JFrame frame = new JFrame("Debug");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(80, 60);
frame.setVisible(true);
}
}