JNI在C++与java间传递各种数据格式举例

来源:互联网 发布:进出口总额 英文数据 编辑:程序博客网 时间:2024/05/16 04:59
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->NewObjectArray(len,minfo.env->FindClass("java/lang/String"),0);for(i=0;iNewStringUTF(sa[i]);minfo.env->SetObjectArrayElement(args,i,str);}//minfo.env->GetStringArrayRegion(args,0,10,buf);//jintArray jmsg = {1,2,3};//minfo.env->NewStringUTF("msg okey! return string");jint index = 0;minfo.env -> CallObjectMethod(jobj,minfo.methodID,args,index);}/* 测试用方法,无返回类型,有java类型的int[]和int参数方法 */isHave = JniHelper::getMethodInfo(minfo,"com/cocoa/HiWorld","testArr", "([II)V"); if (isHave) {jint buf[]={7,5,8,9,3};jintArray jintArr; //定义jint数组jintArr = minfo.env->NewIntArray(5);minfo.env->SetIntArrayRegion(jintArr,0,5,buf);jint index = 0;minfo.env -> CallVoidMethod(jobj,minfo.methodID,jintArr,index);}/* 测试用方法,无返回类型,有java类型的byte[]和int参数方法 */isHave = JniHelper::getMethodInfo(minfo,"com/cocoa/HiWorld","testArr", "([BI)V"); if (isHave) {jbyte buf[]={7,5,8,9,3};jbyteArray jbyteArr; //定义jbyte数组jbyteArr = minfo.env->NewByteArray(5);minfo.env->SetByteArrayRegion(jbyteArr,0,5,buf);jint index = 0;minfo.env -> CallVoidMethod(jobj,minfo.methodID,jbyteArr,index);}

0 0
原创粉丝点击