zoukankan      html  css  js  c++  java
  • 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"});
        }
    }
    
  • 相关阅读:
    141. Linked List Cycle
    2. Add Two Numbers
    234. Palindrome Linked List
    817. Linked List Components
    《算法图解》之快速排序
    C++-对象指针的滥用
    C++学习书籍评价
    C++-随机数的产生
    Java-重载和重写区别剖析
    Qt- 图形界面应用程序的运行模式
  • 原文地址:https://www.cnblogs.com/cnsyear/p/12732091.html
Copyright © 2011-2022 走看看