2014-11-27 4 views
2

JNA를 사용하여 mySMS.DLL의 함수를 호출하여 장치에서 SMS를 읽으려고합니다. sms 세부 정보는 sMessage, sFrom 및 sTime으로 읽혀집니다. 그러나 아래 오류가 발생합니다.Java에서 JNA를 사용할 때 잘못된 메모리 액세스

오류의 원인에 대해 알지 못합니다. 도와주세요. 많은 감사합니다. DLL에 대한

C:\Users\Chi\Desktop\SMS_Pool\install\sms.dll\Mysms.dll>set classpath=.;C:\Program Files (x86)\Java\jre7\lib\* 
C:\Users\Chi\Desktop\SMS_Pool\install\sms.dll\Mysms.dll>"C:\Program Files (x86)\Java\jre7\bin\java" SMSTest 
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:371) 
    at com.sun.jna.Function.invoke(Function.java:315) 
    at com.sun.jna.Library$Handler.invoke(Library.java:212) 
    at com.sun.proxy.$Proxy0.ReadSms(Unknown Source) 
    at SMSTest.main(SMSTest.java:35) 

API 파일 :

_declspec(dllexport) BOOL _stdcall ReadSms(int comport, int baud, int nIndex, char* sMessage, char* sFrom, char* sTime, BOOL bDel); 

자바 코드 :

import com.sun.jna.Library; 
import com.sun.jna.Native; 
import com.sun.jna.Platform; 

public class SMSTest { 
    public interface CLibrary extends Library { 
     CLibrary INSTANCE = (CLibrary) Native.loadLibrary( Platform.isWindows() ? "Mysms" : "c", CLibrary.class); 
     boolean ReadSms(int comport, int baud, int nIndex, String sMessage, String sFrom, String sTime, boolean bDel); 
    } 

public static void main(String[] args) { 
try{ 
    String a= new String(); 
    String b= new String(); 
    String c = new String(); 
    System.out.println(CLibrary.INSTANCE.ReadSms(6,115200, 1, a,b,c,false)); 

}catch (Exception e){ 
} 
} 
} 
+0

원시 코드를 확인하면 이러한 문제는 일반적으로 발생하지 않습니다. – mprabhat

+0

win32와 win64가 일치하지 않을 수 있습니다? – PeterMmm

답변

2

공지 원시 선언에서 _stdcall을? 이는 적절한 호출 규칙을 사용하도록 JNA 인터페이스가 StdCallLibrary 인터페이스를 구현해야한다는 것을 나타냅니다.

+0

링크가 끊어졌습니다. –