cocos2d-x跨平台开发中难免会遇到c++和java之间的互相传值,关于简单的int,string,bool之类的传值Himi已经讲解的很详细了,http://blog.youkuaiyun.com/nat_myron/article/details/11902795。
最近遇到一个问题,需要把c++中的short数组传给java进行处理,再返回string给c++。这时就需要自己动脑了
参考这篇JNI的基础理论教程,http://blog.youkuaiyun.com/nat_myron/article/details/14226685,最后的代码如下
c++代码
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
JniMethodInfo minfo;
bool isHave = JniHelper::getStaticMethodInfo(minfo,
"com/xxx/org/hzhero", "xxxx", "([S)Ljava/lang/String;");
if (isHave)
{
jshortArray tracks = minfo.env->NewShortArray(mCount);
minfo.env->SetShortArrayRegion(tracks,0,mCount,mTracks);
jobject jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID,tracks);
jstring jresult = (jstring)jobj;
const char *s = minfo.env->GetStringUTFChars(jresult, 0);
string sresult(s);
CCLog("result = %s",sresult.c_str());
}
else
CCLog("recognize error---------");
#endif
java代码
public static String xxxx(short[] mTemp) {
short[] m_Data = new short[mTemp.length ];
for (int i = 0; i < mTemp.length; i++) {
m_Data[i] = mTemp[i];
}
String str = "qqqq" ;
return str;
}