其他分享
首页 > 其他分享> > Jni中的各个参数的作用

Jni中的各个参数的作用

作者:互联网

一、jni demo

#include <jni.h>
#include <string>
using namespace std;
extern "C" JNIEXPORT jstring JNICALL
Java_com_qxc_testnativec_MainActivity_stringFromJNI(JNIEnv* env, jobject) {
    string str = "Hello from C++";
    return env->NewStringUTF(str.c_str());
}

这是一个jni的函数,接下来我们解析一下各个参数。

二、extern “C”

1、先看一下去掉和不去掉的区别

//保留extern "C"
000000000000ea98 T 
Java_com_qxc_testnativec_MainActivity_stringFromJNI

//去掉extern "C"
000000000000eab8 T 
_Z40Java_com_qxc_testnativec_MainActivity_stringFromJNIP7_JNIEnvP8_jobject

2、c和c++编译的区别:

所以,如果希望编译后的函数名不变,应通知编译器使用C的编译方式编译该函数(即:加上关键字:extern “C”)。

三、JNIEXPORT、JNICALL

JNIEXPORT 用来表示该函数是否可导出(即:方法的可见性)
JNICALL 用来表示函数的调用规范(如:__stdcall)

四、JNIEnv

JNIEnv 代表了Java环境,通过JNIEnv*就可以对Java端的代码进行操作,如:

五、jobject

jobject 代表了定义native函数的Java类 或 Java类的实例:

标签:Java,函数,jobject,编译,参数,extern,各个,Jni,JNIEnv
来源: https://blog.csdn.net/weixin_42600398/article/details/113405145