JNI JavaVM与JNIEnv解析.md
—- 指针函数对应的实现 我们现在看不到 在库
// …
jstring (*NewStringUTF) (JNIEnv *, char *); // 函数指针 声明
};
// 指针函数对应的实现 我们现在看不到 在库
jstring NewStringUTF(JNIEnv * env, char * str) {
// 注意:在真正的源码中,这里需要很多复杂的代码来转换 (毕竟涉及到跨越语言操作了), 我们就简写了
// char * str <—> jstring str
return str;
}
jstring Java_com_derry_as_1jni_1project_MainActivity3_derryAction(JNIEnv *env, jobject job) {
// env 已经是二级指针了
return (*env)->NewStringUTF(env, “9527”); // 函数指针 不起作用
}
// 模拟 紫色区域 内部处理的逻辑 我们看不到
int main() {
// 构建 JNIEnv *
struct JNINativeInterface nativeInterface;
// 把结构体函数指针 进行赋值 (函数指针---实现)
nativeInterface.NewStringUTF = NewStringUTF;
// 处理生成好的 JNIEnv * 后,传递给 JNI函数
JNIEnv env = &nativeInterface; // 本来就是 一级指针
JNIEnv * jniEnv = &env; // 二级指针
jstring result = Java_com_derry_as_1jni_1project_MainActivity3_derryAction(jniEnv, "com/derry/jni/MainActivity");
// 把jstring 转换 给 Java String 简化了
// jstring -----> String
printf("Java层拿到 C++给我们的 String result:%s", result);
}
```
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LT的编程笔记!