admin管理员组文章数量:1794759
java memory access
1、各位大神,在用jna时,总是报错,如下
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:419)
at com.sun.jna.Function.invoke(Function.java:354)
at com.sun.jna.Library$Handler.invoke(Library.java:244)
at tzwy.chip.motor.$Proxy0.CH375WriteData(Unknown Source)
at tzwy.chip.motor.MotorDll.writeData(MotorDll.java:70)
at tzwy.chip.motor.MotorSingleton.initUSB(MotorSingleton.java:159)
at tzwy.chip.motor.MotorSingleton.initMotor(MotorSingleton.java:103)
at tzwy.chip.motor.MotorSingleton.main(MotorSingleton.java:21)
2、C的函数原型为
BOOL WINAPI CH375GetConfigDescr( // 读取配置描述符
ULONG iIndex, // 指定CH375设备序号
PVOID oBuffer, // 指向一个足够大的缓冲区,用于保存描述符
PULONG ioLength ); // 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
3、jna封装为
interface MotorDllLibrary extends Library {
String fileName = "CH375DLL.DLL";
String filePath = MotorDllLibrary.class.getResource("").getPath().replaceFirst("/", "").replaceAll("%20", " ") + fileName;
MotorDllLibrary motor = (MotorDllLibrary) Native.loadLibrary(filePath, MotorDllLibrary.class);
/**
* 读取设备描述符
*
* @param index 指定CH375设备序号
* @param buff 指向一个足够大的缓冲区,用于保存描述符
* @param length 指向长度单元,输入时为准备读取的长度,返回后为实际读取的长度
* @return 0,失败;其他,成功
*/
int CH375GetDeviceDescr(int index, int[] buff, int length);
}
4、调用如下
public static void main(String[] args) {
try {
int[] s = new int[100];
int l = 0;
int deviceDescr = MotorDllLibrary.motor.CH375GetDeviceDescr(0,s,l);
System.out.println("deviceDescr:" + deviceDescr);
} catch (Exception e) {
e.printStackTrace();
}
}
5、有哪位大神知道怎么回事?
版权声明:本文标题:java memory access 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1686964192a123009.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论