2012-12-26 39 views
5

मैं सीपीपी से जावा तक फ़ंक्शन कॉल पर वापस लौटने की कोशिश कर रहा हूं।जॉबिंग को jstring में परिवर्तित करने के लिए

यह मेरा JNI कॉल

string GetIDJni() 
{ 
    cocos2d::JniMethodInfo methodInfo; 
    if (! JniHelper::getStaticMethodInfo(methodInfo, CLASS_NAME, "GetID", "()Ljava/lang/String")) 
    { 
     return ""; 
    } 

    jobject retObj = methodInfo.env->CallStaticObjectMethod(methodInfo.classID, methodInfo.methodID); 
    jstring retStr = (jstring)retObj; 
    methodInfo.env->DeleteLocalRef(methodInfo.classID); 
    return (JniHelper::jstring2string(retStr));   
} 

संकलन मैं त्रुटि

error: invalid conversion from '_jobject*' to '_jstring*'

किसी कृपया मुझे बताओ कैसे इस समस्या को हल करने के लिए कर सकते हैं पाने पर है।

उत्तर

9

ये रहा ...

const char* GetIDJni() { 

    JniMethodInfo t; 

     if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "GetIDJni", "()Ljava/lang/String;")) { 
      jstring str = (jstring)t.env->CallStaticObjectMethod(t.classID, t.methodID); 
      t.env->DeleteLocalRef(t.classID); 
      CCString *ret = new CCString(JniHelper::jstring2string(str).c_str()); 
      ret->autorelease(); 
      t.env->DeleteLocalRef(str); 

      return ret->m_sString.c_str(); 
     } 

     return 0; 
    } 

और आप इसे एसटीडी के रूप में वापस पाने के लिए चाहते हैं, तो :: स्ट्रिंग फिर

std::string GetIDJni() { 
    std::string ret; 
JniMethodInfo t; 

    if (JniHelper::getStaticMethodInfo(t, CLASS_NAME, "GetIDJni", "()Ljava/lang/String;")) { 
     jstring str = (jstring)t.env->CallStaticObjectMethod(t.classID, t.methodID); 
     t.env->DeleteLocalRef(t.classID); 
     ret=JniHelper::jstring2string(str); 
     t.env->DeleteLocalRef(str); 

     return ret; 
    } 

    return 0; 
} 
+0

क्या आप अलग किया था, उसी पर कास्टिंग कर के अलावा फ़ंक्शन कॉल के साथ लाइन? – SomethingSomething