2014-09-26 41 views
0

我試圖移植的現有代碼是用C++實現的。在我編寫我的java包裝器並在類上運行javah以獲取.h頭文件後,....有沒有一種「正確」的方式來做事?我的現有代碼的相應包裝是否應該用C或C++編寫?當使用JNI移植到現有的C++代碼中時,使用C或C++來與JAVA進行交互?

謝謝!

+0

像[JNA](https://github.com/twall/jna)或[JNR](https://github.com/jnr)等最流行的工具不支持C++,但其他一些工具如[ SWIG](http://www.swig.org/)和[JavaCPP](https://github.com/bytedeco/javacpp),因此答案取決於您計劃使用哪種工具。 – 2014-09-26 23:38:08

+0

我實際上是在用Android NDK進行開發 – bhbbby 2014-09-26 23:46:22

+0

JNI是Java的C/C++接口,而不是其他方式,所以你的問題沒有意義,除非我們談論其他工具。 – 2014-09-26 23:55:36

回答

0

如果使用純JNI,則可以同時使用C和C++編寫。重要的是,如果您使用的是C++,JNI函數(如void Java_com_yourpackage_YourClass_yourMethod(JNIEnv* env, ...))必須聲明爲extern "C",但AFAIK javah正在自動執行。

+0

javah爲你生成'external'C''塊。除了在.c或.cpp文件中包含頭文件之外,您不必擔心它。因此這不是一件「重要的事情」。 – EJP 2014-09-27 00:10:15

+0

非常感謝!我完全不熟悉使用Android開發ndk,所以我仍然對一切如何融合有點失落。 – bhbbby 2014-09-29 22:34:40