1

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); } }

4

0 に答える 0