jni在c中的例子 android jni c

char *jbyteArrayToChar(JNIEnv *env, jbyteArraybytes)
{
char *rtn =NULL;
jsize len= env->GetArrayLength(bytes);

jbyte *arrayBody =env->GetByteArrayElements(bytes,0);
if(len>0)
{
rtn= newchar[len+1];//(char*)malloc(len+1);
memcpy(rtn,arrayBody,len);
rtn[len]=0;
}
env->ReleaseByteArrayElements(bytes,arrayBody,0);
returnrtn;
}

jstring stoJstring(JNIEnv* env, const char* pat)
{
jclass strClass =env->FindClass("Ljava/lang/String;");
jmethodID ctorID =env->GetMethodID(strClass,"<init>","([BLjava/lang/String;)V");
jbyteArray bytes =env->NewByteArray(strlen(pat));
env->SetByteArrayRegion(bytes, 0,strlen(pat), (jbyte*)pat);
jstring encoding =env->NewStringUTF("utf-8");
jni在c中的例子 android jni c
return(jstring)env->NewObject(strClass, ctorID, bytes,encoding);
}

char* jstringTostring(JNIEnv* env, jstring jstr)
{
char* rtn = NULL;
jclass clsstring =env->FindClass("java/lang/String");
jstring strencode =env->NewStringUTF("utf-8");
jmethodID mid =env->GetMethodID(clsstring, "getBytes","(Ljava/lang/String;)[B");
jbyteArray barr=(jbyteArray)env->CallObjectMethod(jstr, mid,strencode);
jsize alen =env->GetArrayLength(barr);
jbyte* ba =env->GetByteArrayElements(barr, JNI_FALSE);
if (alen > 0)
{
rtn = (char*)malloc(alen +1);
memcpy(rtn, ba, alen);
rtn[alen] = 0;
}
env->ReleaseByteArrayElements(barr,ba, 0);
return rtn;
}

JNIEXPORT void JNICALL Java_cn_itcast_Test_Info_1in(JNIEnv *env,jobject obj, jbyteArray buf, jint len)
{
char *CBuf=jbyteArrayToChar(env,buf);
int MyLen=len;
unsigned charuBuf[1024];
memset(uBuf,0,sizeof(uBuf));
memcpy(uBuf,CBuf,strlen(CBuf)+1);
ydt_info_in(uBuf,&MyLen);
CBuf=(char*)uBuf;
jfieldIDj_len=env->GetFieldID(env->GetObjectClass(obj),"MyLen","I");
env->SetIntField(obj,j_len,MyLen);
jfieldIDj_arr=env->GetFieldID(env->GetObjectClass(obj),"MyArr","Ljava/lang/String;");
jstringMyString=stoJstring(env,CBuf);
env->SetObjectField(obj,j_arr,MyString);
}

JNIEXPORT void JNICALL Java_cn_itcast_Test_Info_1out(JNIEnv*env, jobject obj, jstring buf, jint len)
{
char *MyBuf=jstringTostring(env,buf);
int MyLen=len;
ydt_info_out(MyBuf,&MyLen);
jfieldIDj_len=env->GetFieldID(env->GetObjectClass(obj),"MyLen","I");
env->SetIntField(obj,j_len,MyLen);
jfieldIDj_arr=env->GetFieldID(env->GetObjectClass(obj),"MyArr","Ljava/lang/String;");
jstring MyString=stoJstring(env,MyBuf);
env->SetObjectField(obj,j_arr,MyString);

}

  

爱华网本文地址 » http://www.aihuau.com/a/25101015/240051.html

更多阅读

宫颈锥切术在CIN中的诊断和治疗价值 cin3锥切干净就好了吗

摘 要 目的 评价宫颈锥切术在CIN中的诊断和治疗价值。方法 回顾分析22例宫颈锥切术患者的细胞学、阴道镜检查及活检结果、颈管诊刮、宫颈锥切病理及子宫切除术的病理结果,同时分析了并发症的防治及随诊TCT的结果。结果 宫颈锥

转载 关于BOLL-M和BBIBOLL在实战中的比对秋实原创系列 王秋实

原文地址:关于BOLL-M和BBIBOLL在实战中的比对(秋实原创系列)作者:秋实一般平时常用指标BOLL-M布林线-主图叠加指标和BBIBOLL多空指标BBI和布林线叠加比对来分析股票,而且盘中30分钟比较有效,特别是对于BBIBOLL的观察有些心得。BBIBOLL的用

声明:《jni在c中的例子 android jni c》为网友透露着小温馨分享!如侵犯到您的合法权益请联系我们删除