Sample2.java:
public class Sample2 {
public static int square(int n) {
return n * n;
}
}
Sample2.c:
#include <jni.h>
#ifdef _WIN32
#define PATH_SEPARATOR ';'
#else
#define PATH_SEPARATOR ':'
#endif
int main() {
JavaVMOption options[1];
JNIEnv *env;
JavaVM *jvm;
JavaVMInitArgs vm_args;
long status;
jclass cls;
jmethodID mid;
jint square;
jboolean not;
options[0].optionString = "-Djava.class.path=.";
memset(&vm_args, 0, sizeof(vm_args));
vm_args.version = JNI_VERSION_1_2;
vm_args.nOptions = 1;
vm_args.options = options;
status = JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
if (status != JNI_ERR) {
cls = (*env)->FindClass(env, "Sample2");
if(cls != 0) {
mid = (*env)->GetStaticMethodID(env, cls, "square", "(I)I");
if(mid !=0) {
square = (*env)->CallStaticIntMethod(env, cls, mid, 5);
printf("Result of square: %d\n", square);
} else {
printf("Getting static method error!");
}
} else {
printf("Getting class error!");
}
(*jvm)->DestroyJavaVM(jvm);
return 0;
} else {
printf("Creating JVM error!");
return -1;
}
}
S:\tutorials\j-jni>javac Sample2.java
S:\tutorials\j-jni>cl -I"E:\Program Files\j2sdk1.4.2_02\include" -I"E:\Program Files\j2sdk1.4.2_02\include\win32" -I"E:\Program Files\Microsoft Visual Studio\VC98\Include" Sample2.c /c
S:\tutorials\j-jni>link Sample2.obj "E:\Program Files\j2sdk1.4.2_02\lib\jvm.lib"
S:\tutorials\j-jni>sample2
Result of square: 25