float CalcDistance(vector<SoundInfo> &FeatA, vector<SoundInfo> &FeatB){
do something here
}
如果我有这个c ++源代码,那么如何在Android中使用JNI呢? 我阅读了几个使用NDK的教程,并得到了一些基本的想法,但我不确定在c ++中哪种类型的数据结构必须从Java传递给JNI的类型向量 提前谢谢。
答案 0 :(得分:0)
您可以从编写SoundInfo
类型的Java等效项开始,如果它是结构或类(除非它是某种整数类型的typedef)。它应该携带足够的数据来构建SoundInfo
。例如,Java对象可以包含SoundInfo
构造函数的所有参数的等价物,并且可以直接作为字段访问它们以最小化JNI代码。
然后你可以编写两个辅助函数 - 一个用于将Java对象转换为SoundInfo
,另一个用于将Java List<JSoundInfo>
转换为vector<SoundInfo>
。
答案 1 :(得分:0)
您可能希望通过jobjectArray将对象传递给(JNI)/(Java)。您可以将SoundInfo填充到SoundInfo []并直接作为jobjectArray发送,或者如果您只想使用它提供的Get / Set方法,则传递对象本身。
请参阅Get / SetObjectField(),GetObjectArrayElement()等的JNI文档。