gpt4 book ai didi

java - 在 JAVA 中使用 JNA 时内存访问无效

转载 作者:行者123 更新时间:2023-11-30 08:59:35 26 4
gpt4 key购买 nike

我正在尝试使用 JNA 调用 mySMS.DLL 中的函数以从设备读取 SMS。短信详细信息将读入 sMessage、sFrom 和 sTime。但是,我收到以下错误。

不知道是什么导致了错误。请帮忙。非常感谢。

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)

DLL 的 API 文件:

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

Java 代码:

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){
}
}
}

最佳答案

注意到 native 声明中的 _stdcall 了吗?这表明您的 JNA 接口(interface)需要实现 StdCallLibrary接口(interface)以确保它使用正确的调用约定。

关于java - 在 JAVA 中使用 JNA 时内存访问无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27167442/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com