【发布时间】:2020-12-09 16:27:36
【问题描述】:
我想调用 dll 从硬件写入/读取。但是,我收到以下错误:
dll方法:
int NewKey(char *room,char *gate,char *stime,char *guestname,char *guestid, int overflag, int Breakfast, long *cardno,char * track1,char * track2);
java方法:
int NewKey(String room, String gate,String time,String guestname,String guestid, int overflag, int Breakfast, NativeLongByReference cardno, String track1, String track2);
api文档显示cardno为out参数,track1,track2可以为null。
NativeLongByReference cardNo = new NativeLongByReference ();
int res = CLibrary.INSTANCE.NewKey("010001", "00", "201712021200201712031200", "Guest Name","Account No.", 0, 1, cardNo, null, null);
它不起作用。所以我用了一个简单的方法:
dll method :
int EraseCard (long cardno,char * track1,char * track2);
java方法:
int EraseCard(NativeLong cardno, String track1, String track2);
NativeLong a = new NativeLong(0L);
int res = CLibrary.INSTANCE.EraseCard (a, null, null);
它再次得到同样的错误:
Exception in thread "main" java.lang.Error: Invalid memory access
at com.sun.jna.Native.invokeInt(Native Method)
at com.sun.jna.Function.invoke(Function.java:383)
at com.sun.jna.Function.invoke(Function.java:315)
at com.sun.jna.Library$Handler.invoke(Library.java:212)
at A90PmsInterface.main(A90PmsInterface.java:104)
似乎只有当我尝试使用 dll 方法从硬件读取/写入硬件时才会出现该错误。
我该如何解决这个问题?
详情:win7 64位,jre1.8 32位,jna4.1
【问题讨论】:
-
我刚刚看到您使用的是 32 位 java。我在 64 位操作系统和 32 位 java 之间进行了一些 c 字符串转换时遇到了一些麻烦。但是,它看起来加载正常。