我试图使用JNA(或BridJ,从结果是相同的)从java访问扫描程序。从C调用dll时,扫描程序正确响应打开(与扫描仪打开通信),扫描并关闭(关闭扫描程序会话)命令。当我在Java中尝试相同的代码时,对open()的调用以-3状态代码响应,这意味着无法找到扫描程序。如果在从C调用时关闭或断开扫描仪,则会得到相同的结果。
错误的最简单代码就是调用open,并检查它是否成功。 C头中open方法的声明如下:
extern int APIENTRY LS100_Open(HWND hWnd, HANDLE Hinst, char Type_com);
我的dll的java界面是:
public interface LS100 extends StdCallLibrary {
public LS100 instance = (LS100)Native.loadLibrary("Ls100", LS100.class);
public final static byte SUSPENSIVE_MODE = 'S';
public final static byte NOT_SUSPENSIVE_MODE = 'T';
public int LS100_Open(HWND hWnd, HANDLE Hinst, byte Type_com);
}
我现在的主要方法是简单地调用LS100.LS100_Open(null, null, LS100.SUSPENSIVE_MODE)
。 Null句柄在C中工作正常(使用NULL)。
任何帮助都将不胜感激。