如何获取传递给 JNI 的枚举值

2024-04-16

我有一个 Java 应用程序和 JNI (dll)。我想知道如何获取作为参数传递给 JNI 的枚举 (int) 的值。

这是枚举(Java):

public enum envelopeType
{
    NOT_SPECIFIED(-1),
    NONE(0),
    IMAGE(1),
    BITMAP(2);

    private int value;

    private envelopeType(int value)
    {
        this.value = value;
    }   
}

这是 JNI 代码(C++):

JNIEXPORT jint JNICALL Java_Loader_Convert
  (JNIEnv *env, jobject obj, jobject EnvelopeType)

由于枚举作为对象传递,我怎样才能获得它的值?


我无法使用@tbodt 提供的解决方案,但他的解决方案足够接近,我能够找到解决方案。

看着java 枚举文档 http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html有方法ordinal它将返回枚举值int type.

我使用的代码几乎与 @tbodts 解决方案中列出的代码相同,但是字符串传递到了GetMethodID功能不同。我不需要创建一个getValue方法和方法签名是()I not I().

JNIEXPORT jint JNICALL Java_Loader_Convert(JNIEnv *env, jobject obj, jobject EnvelopeType) {
    jmethodID envelopeGetValueMethod = (*env)->GetMethodID(env, (*env)->FindClass(env, "package/of/envelopeType"), "ordinal", "()I");
    jint value = (*env)->CallIntMethod(env, EnvelopeType, envelopeGetValueMethod);
    switch (value) {
        case -1:
        // not specified
        break;
        case 0:
        // none
        break;
        ...
    }
    // rest of native method
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何获取传递给 JNI 的枚举值 的相关文章

随机推荐

  • 用java制作一个“假”鼠标?

    在 java 中 您可以使用机器人类来移动鼠标并触发鼠标单击 虽然这很酷 但它也会 劫持 用户的鼠标 因此您无法执行多任务 我想做的是制作一个 假 鼠标 它独立于系统的鼠标光标运行 并且只存在于我的java小程序中 从这个意义上说 小程序会
  • MongoDB:计算每个状态值更改之间的停留时间

    我想找出每次状态更改之间的停留时间 示例集合 1 id ObjectId 5e4889a7c7959f6a13039902 presenceStatus 0 createdAt ISODate 2020 02 16T00 14 35 121
  • 在 String.split() 中使用捕获组[重复]

    这个问题在这里已经有答案了 node gt ababaabab split a 2 abab bab gt ababaabab split a 2 abab a bab gt 所以 这对我来说没有意义 有人可以解释一下吗 我不明白为什么 a
  • 在nodejs中使用node-sass时找不到libsass绑定

    我想使用node sass模块在我的node js v0 12应用程序从性能中受益libsass 我执行了npm i node sass安装模块 到目前为止没有错误 现在混乱开始了 如果我只是打开REPL在终端中尝试node sass那么一
  • 如何找出 JMS 主题的所有订阅者都已回复?

    使用HornetQ 在JBoss AS 6 0中 我想设置一个多个客户端可以订阅的JMS主题 生产者定期向该主题发送一条带有回复目的地的消息 所有订阅者都应该回复该消息 我遇到的问题是我不完全确定如何检查所有订阅者是否确实回复了 一种解决方
  • 为什么 python 对某些东西使用两个下划线? [复制]

    这个问题在这里已经有答案了 我对实际的编程语言相当陌生 Python 是我的第一个语言 我对 Linux 有点了解 足以用它找到一份暑期工作 我还在读高中 而且在工作中 我有很多空闲时间来学习 Python 不过有一件事一直困扰着我 当你有
  • 通过 void* 进行铸造而不是使用reinterpret_cast [重复]

    这个问题在这里已经有答案了 我正在读一本书 我发现reinterpret cast不应该直接使用 而应该结合使用强制转换为 void static cast T1 p1 void pv p1 T2 p2 static cast
  • 创建帖子后使用 Action Mailer 向用户发送电子邮件

    我有一个 User 模型 带有 Devise 和一个属于用户的 Post 模型 我用了这个 Railscast 专业版 http railscasts com episodes 61 sending email revised创建帐户后向用
  • 给定 3D 空间中的一条线,如何找到从它到一点的角度?

    我在 3D 空间中有两组点 我想画一条穿过两组点的中心的线 然后找到从该线到每个点的角度 从那里开始 我将根据两个角度的接近程度来确定两组中的匹配点 我知道如何找到每组点的中心 只需将它们平均在一起 并且我知道如何将它们匹配 甚至考虑到它们
  • 跟踪大量电子邮件活动

    Litmus 上个月 2010 年 5 月 发布了电子邮件分析服务 看这里 http litmusapp com email analytics http litmusapp com email analytics 他们拥有非常酷的 读取率
  • 如何让 bash 日期脚本返回相对于非当前时间的一周中的某一天?

    使用 bash date 我可以让它返回相对于当前时间的星期几 date d last Sunday Returns date of the Sunday before today 我还可以让它返回相对于其他日期的一天 date d 02
  • PYODBC 不喜欢 %,“SQL 包含 2 个参数标记,但提供了 1 个参数。”

    因此 我目前正在将 Python 与 SQL 链接起来以提取客户信息 不幸的是 我遇到了一些关于 SQL 的错误 我尝试使用 LIKE 运算符和 通配符 但我不断收到错误 因为 Python 不喜欢 结果 它假装 s 之间的变量不存在 这就
  • bash:意外标记“(”附近出现语法错误

    我正在尝试安装一个软件 这个错误一次又一次地出现 我尝试了一些解决方案 这些解决方案建议了类似的错误 但对我不起作用 命令如下 sudo su c R e install packages shiny repos http cran rst
  • Recyclerview 未更新新数据

    嗨 大家好 我有一个片段RecyclerView在里面 那RecyclerView由 Firebase DatabaseReference 对象填充 并在该引用上添加了一个 ValueListener 如下所示 public View on
  • Scala 函数变体和重写

    我在理解重载时方法的差异时遇到了一些问题 虽然由于返回类型的协方差 这可以完美地工作 class Bla class Fasel extends Bla trait Test A def tester Bla new Bla class F
  • 错误:仅具有以下方案的 URL:使用 monorepo 中的 NX 生成的 NestJS 应用程序中的默认 ESM 加载程序支持文件和数据

    我有一个用 NX v16 生成的 Monorepo 我里面有正在运行的 React 应用程序 我使用来自 NX VS Code 插件的 nx 生成器命令生成了 NestJS 应用程序 但是当我启动 Nest 应用程序时nx run
  • Eclipse更新后插件消失了

    已使用更新 Eclipse PDTWindow gt Check for Updates特征 重启后所有第三方插件似乎都被关闭了 从 开始 clean命令行键没有帮助 Eclipse Installation Detals正确包含有关我所有
  • 从两个表中选择最大值、最小值

    我有两张桌子 不同之处在于 归档是一个表 另一个保存当前记录 这些是记录公司销售额的表格 在这两个字段中 我们都有其他字段 id 名称 销售价格 我需要从两个表中选择给定名称的最高价格和最低价格 我尝试处理查询 select name ma
  • 寻找贝宝付款教程[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个教程 它将向我展示如何接受贝宝付款 因为我对文档不太了解 在教程中 我只需要了解如何在发起
  • 如何获取传递给 JNI 的枚举值

    我有一个 Java 应用程序和 JNI dll 我想知道如何获取作为参数传递给 JNI 的枚举 int 的值 这是枚举 Java public enum envelopeType NOT SPECIFIED 1 NONE 0 IMAGE 1