JNA:结构类中 getFieldOrder() 的用途是什么

2024-01-10

我正在尝试调用 dll 文件中存在的 C++ 函数,C++ 函数通过引用将结构对象作为参数,并且函数将在该函数中赋值,

因此,在我的 java 应用程序中,为了将结构对象传递给函数,我确实这样写:

interface SomeInterface extends Library {
    SomeInterface instance = (SomeInterface) Native.loadLibrary("mydll", SomeInterface.class);
    int someFunction(StructClass.ByReference strobject);

    public static class StructClass extends Structure {
        public static class ByReference extends tTIDFUDeviceInfo implements Structure.ByReference {}
        public short xxx = 0;
        public char yyy = '0';
        public boolean zzz = false
        public String www = new String();

        protected ArrayList getFieldOrder() {
            // TODO Auto-generated method stub
            ArrayList fields = new ArrayList();
            fields.add(Arrays.asList(new short{xxx}));
            fields.add(Arrays.asList(new char{yyy}));
            fields.add(Arrays.asList(new boolean{zzz}));
            fields.add(Arrays.asList(new String{www}));
            return fields;
        }
    }
}

我的主课

public class Someclass {
    public static void main(String args[]) {
        SomeInterface.StructClass.ByReference sss=new SomeInterface.StructClass.ByReference();
        SomeInterface obj = SomeInterface.instance;
        obj.someFunction(sss);
    }
} 

当我尝试这个时,它给了我

java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.lang.Comparable

那么我该怎么办? getFieldOrder() 函数有什么问题吗?

谁能解释一下JNA到底如何将java中的类对象转换为C++中的结构对象?

实际上,调用该函数时发生了异常,但我不明白为什么会发生这种情况。


来自 JavaDoc: http://java-native-access.github.io/jna/3.5.1/javadoc/com/sun/jna/Structure.html#getFieldOrder%28%29

按正确的顺序返回此结构的字段名称

然而,您很快就会遇到这样的事实:您正在尝试映射 JNAStructure到 C++ 类上,这根本行不通。 JNA 不提供 JNA 和 C++ 类之间的任何自动转换。

EDIT

明确地说:

protected List<String> getFieldOrder() {
    return Arrays.asList(new String[] { "xxx", "yyy", "zzz", "www" });
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JNA:结构类中 getFieldOrder() 的用途是什么 的相关文章

  • Java中如何动态添加charsequence[]中的数据?

    初始化的一种方法charsequence is charsequence item abc def 但我不想以这种方式初始化它 有人可以建议其他方式吗 比如我们初始化的方式string arrays 首先 修复变量声明 charsequen
  • 在java中将RFC3339 DateTime转换为Date [重复]

    这个问题在这里已经有答案了 如何转换RFC 3339 https www rfc editor org rfc rfc3339java 中的 com google api client util DateTime 到 DateTime 例如
  • 使用 Nginx 时缺少 HTTP 状态代码名称

    我正在使用 Nginx 将所有 HTTP 请求重定向到 HTTPS 在我的 Spring Boot 应用程序中 这是我正在使用的 nginx 配置 通过它我可以将所有请求重定向到 Https 但是当我这样做时 我得到了状态码返回正确 但没有
  • 竞争性编码 - 以最低成本清除所有级别:未通过所有测试用例

    当我遇到这个问题时 我正在一个竞争性编码网站上解决问题 问题指出 游戏中有 N 个关卡和 M 种可用武器 等级编号从 0 到 N 1 武器编号从 0 到 M 1 您可以按任意顺序清除这些级别 在每个关卡中 需要这些 M 武器的某些子集才能通
  • FXML 文件中的 getHostServices().showDocument()

    有没有简单的方法可以将 getHostServices showDocument 命令放入 toHomepage 方法中 而不是执行一行又一行的代码 这样代码应该看起来干净简单 package sample import javafx ap
  • 处理 ANTLR 4 中的错误

    遵循后接受的答案 https stackoverflow com a 18137301 2279200的指示处理 ANTLR4 中的错误 https stackoverflow com q 18132078 2279200问题 我遇到了以下
  • MSVC10 /MP 在项目中跨文件夹构建非多核

    我希望有人指出我们所遇到的错误或解决方法 使用 MP 编译项目时 似乎仅同时编译同一文件夹中的文件 我使用进程资源管理器来滑动命令行并确认行为 项目过滤器似乎对同时编译的内容没有影响 项目结构disk Folder project vcxp
  • Android 反向地理编码不适用于华为设备

    我正在尝试通过这段代码反转地理编码纬度 经度 Geocoder geocoder new Geocoder context Locale ENGLISH try List
  • Java检测鼠标长按

    如果用户按下 JList 组件超过 3 秒 有什么方法可以捕获事件吗 我发现困难的部分是即使在用户松开鼠标左键之前也需要触发事件 这可以通过 mousePressed 和 mouseReleased 组合轻松完成 您可以在 mouseDow
  • Spring Boot 多部分文件始终为 null

    我正在使用 Spring Boot version 1 4 0 RC1 和 Spring Boot Stormpath 1 0 2 我正在尝试使用分段文件上传 但控制器中的 MultipartFile 始终为空 当我使用 RequestPa
  • 有界通配符相关的编译器错误

    我想知道这段代码有什么问题 Map 但我试图说得更具体 这个问题在这个旧的 Apache 线程 ht
  • iText7 将 SVG 添加到 PdfDocument 中以及可能出现的问题

    关于问题的答案 如何使用 iText7 将 SVG 添加到 PDF 这是一个链接点击这里 https stackoverflow com questions 50059456 how to add an svg to a pdf using
  • 如何发现另一个应用程序的意图

    我正在尝试构建一个应用程序来接收来自 StumbleUpon 应用程序的共享 此时 我可以接收浏览器的 共享网址 但是当从 StumbleUpon 共享时 我的应用程序不会显示在列表中 我想我可能没有在清单中注册正确的意图 有什么方法可以找
  • 将字符串转换为字符并按降序排序(ascii)

    我正在创建一个程序 该程序将使用户输入整数 一个接一个 存储在数组中并按降序显示整数 该程序还要求用户输入一个字符串 使用以下命令将其转换为字符string toCharArray 我已经正确地按降序显示整数 问题是我不知道如何按降序显示字
  • logcat 信息出现在 Android Studio 的“运行”选项卡中

    我的 android studio 运行选项卡很简单 然后它变得更难并给我更多信息 例如 logcat 中的信息 如何禁用或删除第二张图片中出现的更多信息并返回到第一张图片中的第一个外观 我只需要正在运行的 flutter 应用程序的日志输
  • 找出该月第一个星期日/星期一等的日期

    我想在java中检测每个月第一周 第二周的第一个星期日 星期一的日期 我怎样才能实现它 我已经检查了 java 中的 Calendar 类和 Date 类 但无法找到解决方案 所以请帮助我解决这个问题 Calendar calendar C
  • Java 中 .NET 的 Lambda 表达式

    我最近 再次 从 C 迁移到 Java 但我非常怀念 lambda 表达式和 C 的 IEnumerable Foreach 之类的东西 所以我正在寻找Java中的lambda表达式库 有比这更好的图书馆吗LambdaJ http code
  • 如何从 jenkins 的现有项目生成 .hpi 插件

    我正在尝试使用 jenkins 的性能插件 但最新版本存在一些问题 如链接中所述 https issues jenkins ci org browse JENKINS 27100 https issues jenkins ci org br
  • Jackson 的 ObjectMapper 和 SQL 中的 RowMapper

    我们正在使用对象映射器 当将 ObjectMapper 与 RowMapper 一起使用时 是否应该在每个 mapRow 内部 如下所示 声明它 还是在 mapRow 外部声明为类公共成员 我认为根据本文 它应该作为公共类成员在外部 我应该
  • 安装 JDK 时出错:keytool 命令需要已安装的 proc fs (/proc)。 Linux 的 Windows 子系统

    我尝试在 Linux 的 Windows 子系统 Ubuntu 14 04 上安装 Oracle JDK 1 7 但出现以下错误 the keytool command requires a mounted proc fs proc Jav

随机推荐

  • 我应该如何使用 cv::Mat_ 命名我的 RGB 通道

    我想通过以下方式访问我的矩阵元素 frame i j Red 即第 i j 个像素的红色通道 我努力了 typedef struct unsigned char Blue Green Red Pixel typedef cv Mat
  • ggplot 中具有对数刻度的等坐标和方形纵横比

    我试图生成一组具有对数轴和两个轴上相同坐标以及正方形纵横比的图 让我们考虑以下假设数据 set seed 1 x lt rnorm 30 50 20 y lt x 20 rnorm 30 0 10 通过使用下面的代码 我获得了一个矩形图 p
  • std::enable_if 或 SFINAE 用于迭代器或指针

    我想写一个构造函数MyClass需要一个参数 我希望只有当参数是一个时才编译pointer or an iterator 有的东西iterator traits 如何实现这一目标 遗憾的是 没有标准的方法来检测一个类是否模型Iterator
  • 在 VS C++ 6.0 中,什么调试工具可以很好地查找内存泄漏的位置?

    我的程序最终消耗了所有内存并崩溃 浏览代码 我找不到任何突出的东西可以做到这一点 您可以修改代码以使用调试版本吗malloc and free 如果是 请检查 malloc dbg http msdn microsoft com en us
  • 将 .cache 文件夹文件路径从绝对路径更改为相对路径。是否可以?

    来自我之前的问题AWS Amplify 控制台中的 Gatsby cache 文件夹 https stackoverflow com questions 57025169 gatsby cache folder in aws amplify
  • 如何用 cabal 建立一个独立的库?

    我有一个库 它依赖于其他一些库 当然还有 haskell 运行时 它导出 C API 我想以一种完全独立的方式构建它 并且用户不会为安装 haskell cabal 和所有依赖项而烦恼 它是完全独立的 用户不会为安装 haskell cab
  • JAVA日期格式“dd/MM/yyyy”和“dd/mm/yyyy”有什么区别? [复制]

    这个问题在这里已经有答案了 在为 java 项目编写代码时 我使用了日期格式 日 月 年 但另一位为同一个项目编写代码的同事使用了 日 月 年 发生格式和不匹配 我还观察到数据库日期格式可以很好地工作 日 月 年 不与 日 月 年 所以我需
  • libpcap:pcap_breakloop() 导致内存泄漏

    使用 Linux 时pthreads and libpcap我在使用时注意到一些奇怪的行为pcap breakloop 我的目标如下 打开一个将运行的新线程pcap loop并处理捕获的数据包 而主线程将执行其他操作 当收到信号 SIGIN
  • GIDSignIn 设置approval_prompt

    问题在于 Google 仅在用户注销应用程序并重新登录后才要求离线访问 Reading this http www riskcompletefailure com 2013 12 are you using approvalpromptfo
  • C 包括防护[重复]

    这个问题在这里已经有答案了 When file1 c包括inc h 包含包含守卫 ifndef INC H 第一次 define INC H被执行 但现在 当另一个file2 c包括相同的inc h 是宏INC H已经定义了 都是同一个故事
  • Linq:选择属性集合

    我有两节课 public class Person public int Id get set public string Name get set public List
  • 是什么原因导致错误“_pickle.UnpicklingError:无效的加载密钥,''。”?

    我正在尝试在数组中存储 5000 个数据元素 这 5000 个元素存储在现有文件中 因此它不为空 但我收到错误 IN def array name puntos df4 m open name rb v 5000 m seek 5000 i
  • “NoneType”对象没有属性“remove_roles”Discord.py

    Keep getting an error for the reaction remove just copy pasted my whole code minus the client id cause it might help I h
  • 为什么我的 Promise 数组在调用 Promise.all() 之前运行?

    我正在尝试创建 Promise 数组 然后使用 Promise all 解析它们 我正在使用 got 它返回一个承诺 我的代码可以工作 但我不完全理解如何工作 这里是 const got require got const url myUr
  • 在 AngularJS 中执行 ng-repeat 内的函数

    我想在 ng repeat 中执行一个函数来检索一些其他数据来显示 例如 我有一份公寓列表 我使用以下方式显示此列表ng repeat 比我想向业主展示的每套公寓 这不是u Apartments So my getInq函数调用服务来获取指
  • Android 驱动程序 JDBC PostgreSQL [重复]

    这个问题在这里已经有答案了 我正在尝试使用 JDBC 驱动程序将我的 Android 应用程序连接到服务器 PostgreSQL 但出现以下错误 java lang ClassNotFoundException org postgresql
  • python 和 networkX keyerror

    我在 python 中遇到这个问题 python 不断给我一个关键错误 重量 g add edge 1 3 weight 2 5 g 1 2 weight 1 5 for n1 n2 attr in g edges data True pr
  • 将 PILLOW 图像转换为 StringIO

    我正在编写一个程序 它可以接收各种常见图像格式的图像 但需要以一种一致的格式检查它们 什么图像格式并不重要 主要是它们都是相同的 由于我需要转换图像格式然后继续处理图像 因此我不想将其保存到磁盘 只需转换它并继续 这是我使用 StringI
  • 编写一个简单的 cron 作业来运行 Java 类

    如何从头开始编写一个 cron 作业来运行 java 类 或者编写一个嵌入 Java 代码来运行的 cron 作业类 以及如何设置计时器每隔一分钟 例如 运行该 cron 作业 注意 完全是 Linux 初学者 这是运行测试作业的示例 sh
  • JNA:结构类中 getFieldOrder() 的用途是什么

    我正在尝试调用 dll 文件中存在的 C 函数 C 函数通过引用将结构对象作为参数 并且函数将在该函数中赋值 因此 在我的 java 应用程序中 为了将结构对象传递给函数 我确实这样写 interface SomeInterface ext