]> rtime.felk.cvut.cz Git - orte/eurobot.git/blob - orte/libjorte/onLoad.c
JORTE: add deserialize function to support endianness setting
[orte/eurobot.git] / orte / libjorte / onLoad.c
1 #include <stdlib.h>
2 #include <jni.h>
3
4 static jmethodID findClassM;
5 static jmethodID findLoadedClassM;
6 static jobject classLoader;
7
8 JavaVM *javavm;
9
10 JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
11   JNIEnv *env;
12   jclass testCl;
13   jclass clClass;
14   jclass clClassLoader;
15   jmethodID getClassLoader;
16
17   (*vm)->GetEnv(vm, (void **)&env, JNI_VERSION_1_6);
18   javavm = vm;
19
20   testCl = (*env)->FindClass(env, "org/ocera/orte/JOrte");
21   clClass = (*env)->FindClass(env, "java/lang/Class");
22   clClassLoader = (*env)->FindClass(env, "java/lang/ClassLoader");
23   getClassLoader = (*env)->GetMethodID(env, clClass, "getClassLoader", "()Ljava/lang/ClassLoader;");
24   classLoader = (*env)->CallObjectMethod(env, testCl, getClassLoader);
25   classLoader = (*env)->NewGlobalRef(env, classLoader);
26   findClassM = (*env)->GetMethodID(env, clClassLoader, "findClass", "(Ljava/lang/String;)Ljava/lang/Class;");
27   findLoadedClassM = (*env)->GetMethodID(env, clClassLoader, "findLoadedClass", "(Ljava/lang/String;)Ljava/lang/Class;");
28
29   return JNI_VERSION_1_6;
30 }
31
32 JNIEXPORT void JNICALL JNI_OnUnload(JavaVM *vm, void *reserved) {
33   JNIEnv *env;
34
35   (*vm)->GetEnv(vm, (void **)&env, JNI_VERSION_1_6);
36
37   (*env)->DeleteGlobalRef(env, classLoader);
38 }
39
40 jclass findClass(JNIEnv *env, const char* name) {
41   jclass cl;
42
43   if ((cl = (*env)->CallObjectMethod(env, classLoader, findLoadedClassM, (*env)->NewStringUTF(env, name))) == NULL) {
44     cl = (*env)->CallObjectMethod(env, classLoader, findClassM, (*env)->NewStringUTF(env, name));
45   }
46
47   return cl;
48 }