我正在从现有项目导入标头以将端口移植到 Android-NDK。在某些情况下,我想在 Java 层使用本机标头中定义的枚举。怎样才能做到这一点呢?
理想情况下,我想以某种方式将常量公开给 Java 层,但我没有找到这样做的方法。
最明显的可能性是在 Java 和 C++ 中双重定义枚举。但是,现有标头 a) 没有明确的编号,b) 具有#ifdef'ed 元素,c) 通过 SVN 外部与现有项目共享。因此,双重定义枚举似乎比典型情况更脆弱。
下一个想法是使用一些构建时代码生成根据预处理的标头在 Java 中创建枚举——可能只是作为整数常量而不是 Java 枚举?
我的第三个也是最模糊的想法是在 Java 中定义枚举,将这些对象传递给 JNI 胶水,并将其与 FindClass()、GetStaticFieldID() 和 GetStaticObjectField() 的某些调用进行比较;然后让 JNI 粘合将它们重新映射到本机枚举。不过,这一切似乎效率很低。
建议?
我将创建一组完全独立的 Java 枚举,并在 JNI 级别上在它们之间进行映射,您可以在其中使用它们。确保在枚举类上运行 javah,以便为它们的序数获得一些#defines。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)