这里不再重复Java JNI 的开发过程了,不熟悉的同学请参考:Java JNI HelloWorld
直接上主要代码:
MethodJNI.java
package com.example.jni;
public class MethodJNI {
static {
System.loadLibrary("methodjni");
}
private void callback() {
System.out.println("Java callback()");
}
private void callback(String param) {
System.out.println(param);
}
private double sum(double x, double y) {
return x + y;
}
public native void showCallback();
public static void main(String[] args) {
MethodJNI item = new MethodJNI();
item.showCallback();
}
}
methodjni.cpp
// methodjni.cpp : Defines the exported functions for the DLL application.
//
#include "stdafx.h"
#include "com_example_jni_MethodJNI.h"
/*
* Class: com_example_jni_MethodJNI
* Method: showCallback
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_example_jni_MethodJNI_showCallback
(JNIEnv * env, jobject obj) {
printf("run in C++\n");
jclass clazz = env->GetObjectClass(obj);
jmethodID callbackID = env->GetMethodID(clazz, "callback", "()V");
env->CallVoidMethod(obj, callbackID);
jmethodID callback2ID = env->GetMethodID(clazz,"callback", "(Ljava/lang/String;)V");
char param[] = "hello,I'm C++";
jstring param1 = env->NewStringUTF(param);
env->CallVoidMethod(obj, callback2ID, param1);
//sum
jmethodID sumxy = env->GetMethodID(clazz, "sum", "(DD)D");
jdouble result = env->CallDoubleMethod(obj, sumxy, 20.0, 30.0);
printf("(C++) sum 20.0+30.0=%.4f", result);
return;
}
ok!