2
私はJNAを使用してdllファイルの関数を呼び出しています。以下JNA - ネイティブ関数からコールバック関数への呼び出しを取得できません
機能の1つは、コールバック関数へのポインタを必要と
// Dll function
void MyFunction (*CallBackFnName);
へのポインタを通過した後、DLLのAPIによるJavaの
import com.sun.jna.Callback;
import com.sun.jna.Library;
import com.sun.jna.Pointer;
public interface Dll extends Library {
interface CallBackFnName extends Callback {
void callback(Pointer dataBuffer, int dataLen);
}
public void MyFunction(Dll.CallBackFnName fn);
public int StartReading(short arg1, short arg2);
}
でJNAプロキシインタフェースでありますコールバック関数を関数MyFunction(* CallBackFnName)、いつでもと呼びます。StartReading()関数はデータをコールバック関数に送信します。
私がそれをしようとしているとき、私のコールバック関数が呼び出されていません。例外をスローしているわけではありません。上記のコードを実行した後
import com.sun.jna.Native;
import com.sun.jna.Pointer;
public class Start {
private static Dll dll = (Dll) Native.loadLibrary("MyDll", Dll.class);
private static Dll.CallBackFnName fn = new Dll.CallBackFnName() {
@Override
public void callback(Pointer dataBuffer, int dataLen) {
System.err.println("Callback function is called successfully");
}
};
public static void main(String[] args) throws InterruptedException {
dll.MyFunction(fn); //passed the pointer to the callback function
short arg1 = 0;
short arg2 = 0;
dll.StartReading(arg1, arg2));
Thread.sleep(10 * 1000);
}
}
、私はコンソールで次のように取得しています::以下
は、私は関数を呼び出していたから、コードがあなたの場合
DeviceAttach: received and accepted attach for vendor id 0x3eb, product id 0x2ffd, interface 0, device handle 0x037825E8
Main Menu (active Dev/Prod/Interface/Alt. Setting: 0x3eb/0x2ffd/0/0)
Read FailReadWritePipesMenu: WDU_Transfer(control receive) failed: error 0x2000000e ("
Read Fail")
Read FailReadWritePipesMenu: WDU_Transfer(control receive) failed: error 0x2000000e ("
Read Fail")
Read FailReadWritePipesMenu: WDU_Transfer(control receive) failed: error 0x2000000e ("
Read Fail")
Transferred 0 bytes
0 0