2012-12-26 16 views
5

cpp' den java'ya yapılan bir işlev çağrısına karşılık bir dizge almaya çalışıyorum.nasıl yapılır: jobject, jstring 'e çevirme

Bu i

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

Herkes nasıl bu sorunu çözmek için lütfen bana hatayı olsun derleme On my JNI'yı çağrı

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));   
} 

olduğunu.

İşte

cevap

9

gitmek ...

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; 
    } 

Ve bunun std olarak dönmek almak :: String istiyorsanız o zaman

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

aynı üzerine casting yapıyor dışında farklı seni ne yaptık işlev çağrısı ile satır? – SomethingSomething

İlgili konular