Ich möchte, erhalte ich den Fehler unten:Java verwenden JNA Aufruf dll Fehler: DLL rufen zu schreiben/lesen von hardware.However ungültigen Speicherzugriff
dll-Methode:
int NewKey(char *room,char *gate,char *stime,char *guestname,char *guestid, int overflag, int Breakfast, long *cardno,char * track1,char * track2);
java methode:
Das api-Dokument zeigt cardno als out-Parameter und track1, track2 könnte null sein.
NativeLongByReference cardNo = new NativeLongByReference();
int res = CLibrary.INSTANCE.NewKey("010001", "00", "201712021200201712031200", "Guest Name","Account No.", 0, 1, cardNo, null, null);
Es funktioniert nicht. So verwende ich eine einfache Methode:
dll method :
int EraseCard (long cardno,char * track1,char * track2);
Java-Methode:
int EraseCard(NativeLong cardno, String track1, String track2);
NativeLong a = new NativeLong(0L);
int res = CLibrary.INSTANCE.EraseCard (a, null, null);
Es erhält den gleichen Fehler wieder:
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)
Es scheint, wie der Fehler tritt nur auf, wenn ich Versuchen Sie, die DLL-Methoden zum Lesen/Schreiben von/zur Hardware zu verwenden.
Wie kann ich das Problem lösen?
Details: win7 64 Biss, jre1.8 32bite, jna4.1
Ich habe gerade gesehen, wie Sie das 32-Bit-Java verwenden. Ich hatte einige Probleme mit einigen c-String-Konvertierung zwischen 64-Bit-OS und 32-Bit-Java. Es sieht jedoch so aus, als ob es ok geladen wird. – TBridges