JNI调用C++dll库报错Unsupported argument type
关于如何JNI如何调用C++dll库传递结构体,请参考2019-09-28-JNI调用C++dll动态库如何转换struct结构体为java实体类。
jna调用c++dll库时报错:
Unsupported argument type com.master.masterHardwareSys.vo.TMcProgramInfo
at parameter 2 of function mcBoxGetMcvInfo
异常信息提示参数类型对不上?原因可能是java中没有struct结构体
关于Java中结构体
有时候我们需要在Java端访问某个C/C++结构体中的成员,我们就需要在Java端复写这个结构体,在复写的时候需要注意:
- 继承com.sun.jna.Structure类
- 重写getFieldOrder()来告诉C/C++的成员取值次序
- 如果在结构体定义中定义了内部类需要使用ByReference和ByValue,来实现指针类型接口和值类型接口
package com.master.masterHardwareSys.vo;
import com.sun.jna.Structure;
import lombok.Data;
import java.util.Arrays;
import java.util.List;
@Data
public class TMcProgramInfo extends Structure {
public String name; //节目名(节目文件夹名称)
public String date; //上传时间,如: 2016-07-12 12:01:32
public int size; //大小(字节)
public String rem; //节目备注信息
//定义取值次序,需要与C/C++中对齐,不然会出现NoSuchFieldError
@Override
protected List getFieldOrder() {
return Arrays.asList(new String[]{"name", "date", "size", "rem"});
}
}