我試圖移植的現有代碼是用C++實現的。在我編寫我的java包裝器並在類上運行javah以獲取.h頭文件後,....有沒有一種「正確」的方式來做事?我的現有代碼的相應包裝是否應該用C或C++編寫?當使用JNI移植到現有的C++代碼中時,使用C或C++來與JAVA進行交互?
謝謝!
我試圖移植的現有代碼是用C++實現的。在我編寫我的java包裝器並在類上運行javah以獲取.h頭文件後,....有沒有一種「正確」的方式來做事?我的現有代碼的相應包裝是否應該用C或C++編寫?當使用JNI移植到現有的C++代碼中時,使用C或C++來與JAVA進行交互?
謝謝!
如果使用純JNI,則可以同時使用C和C++編寫。重要的是,如果您使用的是C++,JNI函數(如void Java_com_yourpackage_YourClass_yourMethod(JNIEnv* env, ...)
)必須聲明爲extern "C"
,但AFAIK javah
正在自動執行。
像[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
我實際上是在用Android NDK進行開發 – bhbbby 2014-09-26 23:46:22
JNI是Java的C/C++接口,而不是其他方式,所以你的問題沒有意義,除非我們談論其他工具。 – 2014-09-26 23:55:36