2011-05-25 42 views
0
float CalcDistance(vector<SoundInfo> &FeatA, vector<SoundInfo> &FeatB){ 
    do something here 
} 

如果我有這個C++源代碼,那麼我如何在Android中使用JNI? 我讀了幾個使用NDK的教程,並得到了一些基本的想法,但我不知道什麼類型的數據結構必須從Java傳遞到JNI類型向量在c + + 在此先感謝。Android NDK,C++矢量數據類型

回答

0

如果它是一個結構體或類(除非它是某種整數類型的typedef),那麼可以通過編寫SoundInfo類型的Java等價物開始。它應該攜帶足夠的數據來構建SoundInfo。例如,Java對象可以包含SoundInfo的構造函數的所有參數的等價物,並且它們可以作爲字段直接訪問以最小化JNI代碼。

然後,您可以編寫兩個輔助函數 - 一個將Java對象轉換爲SoundInfo,另一個將Java List<JSoundInfo>轉換爲vector<SoundInfo>

0

您可能希望通過jobjectArray將對象傳遞給(Java)/(Java)。您可以將SoundInfo填充到SoundInfo []中,並直接將其作爲jobjectArray發送,或者如果您只想使用它提供的Get/Set方法,則可以傳遞該對象本身。

查看Get/SetObjectField(),GetObjectArrayElement()等的JNI文檔。