jni java C/C++ 相互调用
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha
java 中 声明 一个 native 方法
用javah命令 生成 包含 native方法定义的 c++头文件
在 项目目录 下 打开命令行输入 javah hmfs.TestNative 就生成了对应的 头文件
创建c++工程,把刚才的头文件 复制过来。
创建c++文件, 编写相关代码。 注意 包含的头文件。 编译之后,会生成一个 dll 文件。
将dll文件路径 可以添加到 windows的 path环境变量中
然后java代码中
System.loadLibrary(“nativeCode”); //这个就是dll文件的名字
TestNative mTestNative = new TestNative ();
mTestNative.printText();
这样就成功调用了c++代码
=====
在我们创建的C++文件中,遵循了jni的一些规则。
JNIEnv 意思是 java环境。
通过 JNIEnv* 这个指针 就可以 调用java代码,创建对象,调用方法,获取属性。
JNIEnv 这个类中 有很多方法,比如 创建对象,创建字符串,创建数组,获得或设置字段,调用方法,查找类,获得对象类,获得父类 等。
jobject
jclass 表示 java中的 Class类。
JNIEnv中 有几个方法 与jclass相关。 查找类,获得对象类,获得父类。
FIndClass 会在 classpath环境变量下 寻找类。 传入完整类名。如:
jclass cls_string = env->FindClass("java/lang/String");
jni.h这个头文件中 定义了 jfieldID,jmethodID 代表 java端的字段和方法。
JNIEnv中 有 相关方法如:获得字段ID,获得方法ID。
如 env->GetMethodID(data_Clazz,"<int>","()V")
第一参数 是 jclass , 表明在哪个类中
第二个 是 表名 属性或者方法的 名称
第三个 是 指定 取得的属性 或者 方法参数的类型。
(I)V 是 int 类型。 (D) 是 double类型。
可以用 javap 命令来查看 java代码 对应的 签名 从而得到第三个参数。
获得 修改 java中的 字段。
c++调用 java中的方法
c++创建java 类对象
c++ 获得java中的 字符串,并修改。