C ++ / JNI - 如何在JAVA(Android NDK)中访问.h中声明的枚举

时间:2015-07-29 14:51:35

标签: java c++ enums android-ndk java-native-interface

我在C ++中有头文件,其中声明了一些枚举。

// enum.h
enum event {
    event_1,
    event_2,
    event_3,
    event_4
}

C ++文件和标头在库.so。

中编译(使用GNU)

现在我想在我的Java类中这样做:

// Test.java
public class Test {
    private event currentEvent;

    public test() {
        if (currentEvent == event.event_1)
            ; // I will do my stuff
    }
}

有人有建议吗?

由于

1 个答案:

答案 0 :(得分:1)

我怀疑有这样做的直接方式。

对于C或C ++,您可以使用SWIG。它自动为C ++类和元素生成Java包装器。

  

21.3.5.5简单的枚举

     

这种方法类似于不安全的方法。每个枚举项目   也包装为静态最终整数。但是,这些整数是   没有生成一个以C / C ++枚举命名的类。相反,全球化   枚举生成到常量接口中。此外,定义了枚举   在C ++类中,它们的枚举项直接生成到Java中   代理类而不是Java代理类中的内部类。在   事实上,这种方法有效地包装了枚举,就像它们一样   匿名枚举和结果代码按照匿名枚举。该   实现在" enumsimple.swg"文件。

     

兼容性注意:SWIG-1.3.21及更早版本包装了所有枚举   使用这种方法。类型不安全的方法比这更好   一个和这个简单的方法只包括倒退   与这些早期版本的SWIG兼容。