gpt4 book ai didi

java - 在 java 中使用 CPP 枚举常量

转载 作者:行者123 更新时间:2023-11-30 05:05:11 24 4
gpt4 key购买 nike

我一直在做一个同时支持 CPP 和 Java 的项目,我在 cpp 头文件中有一些枚举常量。是否可以通过任何更改在使用 JNI 的 Java 中使用这些 header ?

最佳答案

您可以轻松地将 C++ enum 的整数值获取到 Java 中。例如,C errno 值(技术上不是 enum,但我从手边的一些代码中抓取了这个示例)。

Java:

public static final int EINVAL = getEINVAL();

private static final int getEINVAL();

native 代码:

JNIEXPORT jint JNICALL Java_some_class_getEINVAL( JNIEnv *env, jclass cls )
{
return( EINVAL );
}

请注意,您应该始终使用 javah 生成 native 头文件,然后使用这些声明来定义您的 native 函数。

请随意将 Java int 替换为 Integer 甚至 Java enum。我还没有尝试过这个特定的代码:

enum errno
{
EINVAL( getEINVAL() ),
ENOENT( getENOENT() ),
.
.


private int value;

errno( int value )
{
this.value = value;
}
}

但是类似的东西应该很容易编码。

enum 值替换 native errno 值对于每个值来说都是微不足道的。困难的部分变成了当有很多很多 enum 常量要传递给 Java 时,如何保持 Java 和 native 值之间的联系。我从来没有找到比简单地对方法进行硬编码更清晰的方法。它可能很乏味,但如果 enum 值不改变,它是可以管理的。如果 native enum 值变化很大,您可能需要想出另一种方法,这样您就不会花费大量时间来替换源代码中的值。

关于java - 在 java 中使用 CPP 枚举常量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48527710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com