package com.aruba.jniapplication;
import java.util.Random;
public class JniDemo2 {
static {
System.load("C:\\Users\\tyqhc\\source\\repos\\JniApplication\\x64\\Debug\\JniApplication.dll");
}
public native void callRandom();
private int getRandom(int bound) {
return new Random().nextInt(bound);
}
public static void main(String[] args) {
}
}
head文件
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class com_aruba_jniapplication_JniDemo */
#ifndef _Included_com_aruba_jniapplication_JniDemo
#define _Included_com_aruba_jniapplication_JniDemo
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java_com_aruba_jniapplication_JniDemo2_callRandom
(JNIEnv*, jobject);
#ifdef __cplusplus
}
#endif
#endif
cpp文件
#include "my_jni2.h"
#include<string>
using namespace std;
JNIEXPORT void JNICALL Java_com_aruba_jniapplication_JniDemo2_callRandom
(JNIEnv* env, jobject jobj) {
//获取jclass
jclass jclz = env->GetObjectClass(jobj);
//三个参数:1:对应类的jclass 2:方法名 3:方法签名
jmethodID jmid = env->GetMethodID(jclz,"getRandom","(I)I");
//根据返回值,调用相应方法,我这边返回值是int,第三个参数为可变参数,就是调用方法需要传入的参数
jint int_random = env->CallIntMethod(jobj, jmid,500);
//打印
printf("%d",int_random);
}
public static void main(String[] args) {
JniDemo2 jniDemo2 = new JniDemo2();
jniDemo2.callRandom();
}
public static native void callUUID();
private static String getUUID() {
return UUID.randomUUID().toString();
}
JNIEXPORT void JNICALL Java_com_aruba_jniapplication_JniDemo2_callUUID
(JNIEnv*, jclass);
JNIEXPORT void JNICALL Java_com_aruba_jniapplication_JniDemo2_callUUID
(JNIEnv* env, jclass jclz) {
//获取静态方法的jmethodID
jmethodID jmid = env->GetStaticMethodID(jclz, "getUUID", "()Ljava/lang/String;");
//调用静态Java方法
jstring jstr = (jstring)env->CallStaticObjectMethod(jclz, jmid);
//将Java方法返回值转换为c++string对象
string uuid = env->GetStringUTFChars(jstr, NULL);
//创建一个文件
string file_name = uuid + ".txt";
string file_path = "C://Users//tyqhc//Desktop//" + file_name;
FILE* f = fopen(file_path.c_str(),"w");
fprintf(f,"hello Java %s",uuid.c_str());
fclose(f);
}
package com.aruba.jniapplication;
import java.util.Random;
import java.util.UUID;
public class JniDemo2 {
static {
System.load("C:\\Users\\tyqhc\\source\\repos\\JniApplication\\x64\\Debug\\JniApplication.dll");
}
public native void callRandom();
private int getRandom(int bound) {
return new Random().nextInt(bound);
}
public static native void callUUID();
private static String getUUID() {
return UUID.randomUUID().toString();
}
public static void main(String[] args) {
JniDemo2 jniDemo2 = new JniDemo2();
jniDemo2.callRandom();
jniDemo2.callUUID();
}
}
public class HelloC {
public HelloC() {
}
private long giveC() {
return 1234;
}
}
/*
* Class: com_aruba_jniapplication_JniDemo2
* Method: createHelloC
* Signature: ()Lcom/aruba/jniapplication/HelloC;
*/
JNIEXPORT jobject JNICALL Java_com_aruba_jniapplication_JniDemo2_createHelloC
(JNIEnv *, jobject);
JNIEXPORT jobject JNICALL Java_com_aruba_jniapplication_JniDemo2_createHelloC
(JNIEnv* env, jobject jobj) {
//首先找到我们需要实例化的class,通过包名加类名
jclass hello_class = env->FindClass("com/aruba/jniapplication/HelloC");
//获取构造方法jmethodID,所有构造方法名都是<init>
jmethodID jmid = env->GetMethodID(hello_class, "<init>", "()V");
//实例化
jobject hello = env->NewObject(hello_class,jmid);
//调用hello的giveC方法
jmid = env->GetMethodID(hello_class, "giveC", "()J");
jlong data = env->CallLongMethod(hello,jmid);
printf("\n %ld",data);
return hello;
}
public static void main(String[] args) {
JniDemo2 jniDemo2 = new JniDemo2();
jniDemo2.callRandom();
HelloC helloC = jniDemo2.createHelloC();
}