JNI调用C++dll库报错Unsupported argument type

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"});
    }
}
posted @ 2019-09-28 01:21  趙小傑  阅读(1689)  评论(0编辑  收藏  举报