使用Eclipse和VS。实现JNI的基本调用。
eclipse代码
package com.skyl.jni.first;
/*
* JNI(java native interface)
*
* 1.编写native方法
* 2.javah命令,生成.h头文件
* 注:配置java环境变量,javah—类名在eclipse中生成.h文件
* 3.复制.h头文件到cpp工程中
* 4.实现.h头文件中声明的函数
* 5、生成dll文件给java调用
* 6、配置dll文件所在目录到环境变量
* 7、重启Eclipse
*
*/
public class JniTest {
public native static void getStringFromC();
public static void main(String[] args){
}
//加载动态库
static{
System.loadLibrary("jni_study");
}
}
VS代码
#include "com_com_skyl_jni_first_JniTest.h"
//函数实现
JNIEXPORT jstring JNICALL Java_com_skyl_jni_first_JniTest_getStringFromC
(JNIEnv *env, jclass jcls){
//JNIEnv 结构体指针
//typedef const struct JNINativeInterface_ *JNIEnv;
//struct JNINativeInterface_ {
//void *reserved0;
//void *reserved1;
//void *reserved2;}
//代表Java运行环境,调用Java中的代码
//JNIEnv 在C++中就是一个结构体的别名,在C中是一个结构体指针
//env 在C++中一个结构体的一级指针,env在C中是一个二级指针
//简单的实现
//将C的字符串转为一个java字符串
return (*env)->NewStringUTF(env,"C String");
}
注:在VS的头文件中要复制jni.h和jni_md.h