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库时报错:

1
2
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,来实现指针类型接口和值类型接口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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"});
}
}
-------------已经触及底线 感谢您的阅读-------------

本文标题:JNI调用C++dll库报错Unsupported argument type

文章作者:趙小傑~~

发布时间:2019年09月28日 - 01:21:29

最后更新:2019年09月28日 - 01:25:58

原始链接:https://cnsyear.com/posts/209ec802.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

0%