C++调用Java(二)

2014-11-24 02:35:58 · 作者: · 浏览: 3
tyObj; if (isHave) { //调用静态函数getJavaActivity,获取java类对象。 activityObj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID); } //2. 查找displayWebView接口,获取其函数信息,并用jobj调用 isHave = JniHelper::getMethodInfo(minfo,"com/omega/MyApp","displayWebView", "(IIII)V"); if (!isHave) { CCLog("jni:displayWebView 函数不存在"); } else { //调用此函数 jint jX = (int)tlX; jint jY = (int)tlY; jint jWidth = (int)webWidth; jint jHeight = (int)webHeight; //调用displayWebView函数,并传入参数 minfo.env->CallVoidMethod(activityObj, minfo.methodID, jX, jY, jWidth, jHeight); }

详尽的示例代码

最后,放一块比较详细的JNI使用代码,基本上覆盖了的全部使用情况。

    JniMethodInfo minfo;//JniHelper   

    /* 测试用方法 */ 
    /*bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/cocoa/HiWorld","loginGree", "()V"); //
     if (isHave) {
     //CCLog("有showText ");
     minfo.env -> CallStaticVoidMethod(minfo.classID,minfo.methodID);
     }else
     {
     //CCLog("没有方法showText");
     }*/

    /* 分享 */
    /*//将c++中的string转换成java中的string
     //char str[] = "test";
     bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/cocoa/HiWorld","shareSina", "(Ljava/lang/String;Ljava/lang/String;)V"); //
     if (isHave) {
     //CCLog("有share ");
     jstring jstr = minfo.env->NewStringUTF("test1 share");
     jstring jst = minfo.env->NewStringUTF("/data/data/com.cocoa/cy.png"); 
     //jstring jst = minfo.env->NewStringUTF("");
     minfo.env -> CallStaticVoidMethod(minfo.classID,minfo.methodID,jstr,jst);
     }else
     {
     //CCLog("没有方法share");
     }*/
    /* 设置高分 */
    /*jint ind = 0;
     jlong lsre = 2202l;
     bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/cocoa/HiWorld","setHighScore", "(IJ)V"); 
     if (isHave) {
     minfo.env ->
CallStaticVoidMethod(minfo.classID,minfo.methodID,ind,lsre); }*/ /* 成就解锁 */ /*jint aind = 0; bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/cocoa/HiWorld","unLock", "(I)V"); if (isHave) { minfo.env -> CallStaticVoidMethod(minfo.classID,minfo.methodID,aind); }*/ /* 测试用方法 */ bool isHave = JniHelper::getStaticMethodInfo(minfo,"com/cocoa/HiWorld","rtnActivity","()Ljava/lang/Object;"); jobject jobj; if (isHave) { jobj = minfo.env->CallStaticObjectMethod(minfo.classID, minfo.methodID); } //CCLog(" jobj存在"); /* 测试用方法,非静态无参数无返回值方法 */ /*isHave = JniHelper::getMethodInfo(minfo,"com/cocoa/HiWorld","showText", "()V"); if (isHave) { minfo.env -> CallVoidMethod(jobj,minfo.methodID); }*/ /* 测试用方法,非静态有java类型的String参数无返回值方法 */ /*isHave = JniHelper::getMethodInfo(minfo,"com/cocoa/HiWorld","showText", "(Ljava/lang/String;)V"); if (isHave) { jstring jmsg = minfo.env->NewStringUTF("msg okey!"); minfo.env -> CallVoidMethod(jobj,minfo.methodID,jmsg); }*/ /* 测试用方法,返回java类型的String,有java类型的String和int参数方法 */ /*isHave = JniHelper::getMethodInfo(minfo,"com/cocoa/HiWorld","showText", "(Ljava/lang/String;I)Ljava/lang/String;"); if (isHave) { jstring jmsg = minfo.env->NewStringUTF("msg okey! return string"); jint index = 0; minfo.env -> CallObjectMethod(jobj,minfo.methodID,jmsg,index); }*/ /* 测试用方法,返回java类型的String[],有java类型的String[]和int参数方法 */ /*isHave = JniHelper::getMethodInfo(minfo,"com/cocoa/HiWorld","showText", "([Ljava/lang/String;I)[Ljava/lang/String;"); if (isHave) { jobjectArray args = 0; jstring str; jsize len = 5; const char* sa[] = {"Hi,","World!","JNI ","is ","fun"}; int i = 0; args = minfo.env->NewObjectArra