46个不可不知的常识 >>
<< Simple JNI: Calling C/C++ From Java
Simple JNI:Calling Java From C/C++

Author Zhou Renjian Create@ 2004-11-17 22:15
whizz Note icon

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

本记录所在类别:
本记录相关记录: