c++调用java
项目例子
void QNativeUtils::downloadApp(const char * appUrl, const char * version, const char * desc){
JniMethodInfo t;
if(JniHelper::getStaticMethodInfo(t, JAVA_CLASS, "downloadApp", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"))
{
jstring jAppUrl = t.env->NewStringUTF(appUrl);
jstring jVersion= t.env->NewStringUTF(version);
jstring jDesc= t.env->NewStringUTF(desc);
t.env->CallStaticVoidMethod(t.classID, t.methodID, jAppUrl, jVersion, jDesc);
t.env->DeleteLocalRef(jAppUrl);
t.env->DeleteLocalRef(jVersion);
t.env->DeleteLocalRef(jDesc);
t.env->DeleteLocalRef(t.classID);
}
}
int QNativeUtils::getVersionCode(){
JniMethodInfo t;
if(JniHelper::getStaticMethodInfo(t, JAVA_CLASS, "getVersionCode", "()I"))
{
jint ret = t.env->CallStaticIntMethod(t.classID, t.methodID);
t.env->DeleteLocalRef(t.classID);
return ret;
}
return 0;
}
几个点:
1.string类型转换
c++转java
jstring jAppUrl = t.env->NewStringUTF(appUrl);
java转c++
std::string ret = JniHelper::jstring2string(str);
2.需手动释放的类型
引用类型,数组: jstring,jobject ,jobjectArray,jintArray ,jclass ,jmethodID
t.env->DeleteLocalRef(t.classID);
3.不要手动释放
基本类型: jint , jlong , jchar
本文介绍了一个C++调用Java方法的具体实现案例。通过JNI接口,文章展示了如何将C++字符串转换为Java字符串,并提供了手动管理资源的示例代码。此外,还介绍了不同类型的Java对象在使用后如何正确释放。
957

被折叠的 条评论
为什么被折叠?



