1 /********************************** jni.c *****************************************
3 implementation of the Java Native Interface functions
4 which are used in the JNI function table
6 ***********************************************************************************/
9 #define JNI_VERSION 0x00010002
12 /********************* accessing instance-fields **********************************/
14 #define setField(obj,typ,var,val) *((typ*) ((long int) obj + (long int) var->offset))=val;
15 #define getField(obj,typ,var) *((typ*) ((long int) obj + (long int) var->offset))
16 #define setfield_critical(clazz,obj,name,sig,jdatatype,val) setField(obj,jdatatype,getFieldID_critical(env,clazz,name,sig),val);
18 /*************************** function: jclass_findfield ****************************
20 searches for field with specified name and type in a 'classinfo'-structur
21 if no such field is found NULL is returned
23 ************************************************************************************/
25 fieldinfo *jclass_findfield (classinfo *c, utf *name, utf *desc)
28 for (i = 0; i < c->fieldscount; i++) {
29 if ((c->fields[i].name == name) && (c->fields[i].descriptor == desc))
30 return &(c->fields[i]);
36 /********************* returns version of native method interface *****************/
38 jint GetVersion (JNIEnv* env)
43 /****************** loads a class from a buffer of raw class data *****************/
45 jclass DefineClass(JNIEnv* env, const char *name, jobject loader, const jbyte *buf, jsize len)
49 /* change suck-mode, so subsequent class_load will read from memory-buffer */
50 classload_buffer( (u1*) buf,len);
52 clazz = loader_load(utf_new_char ((char *) name));
54 /* restore old suck-mode */
55 classload_buffer(NULL,0);
61 /*************** loads locally defined class with the specified name **************/
63 jclass FindClass (JNIEnv* env, const char *name)
67 c = loader_load(utf_new_char ((char *) name));
69 if (!c) exceptionptr = native_new_and_init(class_java_lang_ClassFormatError);
75 /***********************************************************************************
77 converts java.lang.reflect.Method or
78 java.lang.reflect.Constructor object to a method ID
80 **********************************************************************************/
82 jmethodID FromReflectedMethod (JNIEnv* env, jobject method)
84 log_text("JNI-Call: FromReflectedMethod");
88 /*************** return superclass of the class represented by sub ****************/
90 jclass GetSuperclass (JNIEnv* env, jclass sub)
94 c = ((classinfo*) sub) -> super;
97 use_class_as_object (c);
102 /*********************** check whether sub can be cast to sup ********************/
104 jboolean IsAssignableForm (JNIEnv* env, jclass sub, jclass sup)
106 return builtin_isanysubclass(sub,sup);
110 /***** converts a field ID derived from cls to a java.lang.reflect.Field object ***/
112 jobject ToReflectedField (JNIEnv* env, jclass cls, jfieldID fieldID, jboolean isStatic)
114 log_text("JNI-Call: ToReflectedField");
118 /***************** throw java.lang.Throwable object ******************************/
120 jint Throw (JNIEnv* env, jthrowable obj)
122 exceptionptr = (java_objectheader*) obj;
127 /***********************************************************************************
129 create exception object from the class clazz with the
130 specified message and cause it to be thrown
132 **********************************************************************************/
135 jint ThrowNew (JNIEnv* env, jclass clazz, const char *msg)
137 java_lang_Throwable *o;
139 /* instantiate exception object */
140 o = (java_lang_Throwable *) native_new_and_init ((classinfo*) clazz);
144 o->detailMessage = (java_lang_String*) javastring_new_char((char *) msg);
146 exceptionptr = (java_objectheader*) o;
150 /************************* check if exception occured *****************************/
152 jthrowable ExceptionOccurred (JNIEnv* env)
154 return (jthrowable) exceptionptr;
157 /********** print exception and a backtrace of the stack (for debugging) **********/
159 void ExceptionDescribe (JNIEnv* env)
161 utf_display(exceptionptr->vftbl->class->name);
167 /******************* clear any exception currently being thrown *******************/
169 void ExceptionClear (JNIEnv* env)
175 /********** raises a fatal error and does not expect the VM to recover ************/
177 void FatalError (JNIEnv* env, const char *msg)
182 /******************* creates a new local reference frame **************************/
184 jint PushLocalFrame (JNIEnv* env, jint capacity)
189 /**************** Pops off the current local reference frame **********************/
191 jobject PopLocalFrame (JNIEnv* env, jobject result)
197 /** Creates a new global reference to the object referred to by the obj argument **/
199 jobject NewGlobalRef (JNIEnv* env, jobject lobj)
201 heap_addreference ( (void**) &lobj);
205 /************* Deletes the global reference pointed to by globalRef **************/
207 void DeleteGlobalRef (JNIEnv* env, jobject gref)
213 /*************** Deletes the local reference pointed to by localRef ***************/
215 void DeleteLocalRef (JNIEnv* env, jobject localRef)
220 /********** Tests whether two references refer to the same Java object ************/
222 jboolean IsSameObject (JNIEnv* env, jobject obj1, jobject obj2)
227 /***** Creates a new local reference that refers to the same object as ref *******/
229 jobject NewLocalRef (JNIEnv* env, jobject ref)
234 /***********************************************************************************
236 Ensures that at least a given number of local references can
237 be created in the current thread
239 **********************************************************************************/
241 jint EnsureLocalCapacity (JNIEnv* env, jint capacity)
243 return 0; /* return 0 on success */
247 /********* Allocates a new Java object without invoking a constructor *************/
249 jobject AllocObject (JNIEnv* env, jclass clazz)
251 java_objectheader *o = builtin_new(clazz);
256 /***********************************************************************************
258 Constructs a new Java object
259 arguments that are to be passed to the constructor are placed after methodID
261 ***********************************************************************************/
263 jobject NewObject (JNIEnv* env, jclass clazz, jmethodID methodID, ...)
265 log_text("JNI-Call: NewObject");
268 /***********************************************************************************
270 Constructs a new Java object
271 arguments that are to be passed to the constructor are placed in va_list args
273 ***********************************************************************************/
275 jobject NewObjectV (JNIEnv* env, jclass clazz, jmethodID methodID, va_list args)
277 log_text("JNI-Call: NewObjectV");
280 /***********************************************************************************
282 Constructs a new Java object
283 arguments that are to be passed to the constructor are placed in
284 args array of jvalues
286 ***********************************************************************************/
288 jobject NewObjectA (JNIEnv* env, jclass clazz, jmethodID methodID, jvalue *args)
290 log_text("JNI-Call: NewObjectA");
294 /************************ returns the class of an object **************************/
296 jclass GetObjectClass (JNIEnv* env, jobject obj)
298 classinfo *c = obj->vftbl -> class;
299 use_class_as_object (c);
303 /************* tests whether an object is an instance of a class ******************/
305 jboolean IsInstanceOf (JNIEnv* env, jobject obj, jclass clazz)
307 return builtin_instanceof(obj,clazz);
311 /***************** converts a java.lang.reflect.Field to a field ID ***************/
313 jfieldID FromReflectedField (JNIEnv* env, jobject field)
315 log_text("JNI-Call: FromReflectedField");
318 /**********************************************************************************
320 converts a method ID to a java.lang.reflect.Method or
321 java.lang.reflect.Constructor object
323 **********************************************************************************/
325 jobject ToReflectedMethod (JNIEnv* env, jclass cls, jmethodID methodID, jboolean isStatic)
327 log_text("JNI-Call: ToReflectedMethod");
330 /**************** returns the method ID for an instance method ********************/
332 jmethodID GetMethodID (JNIEnv* env, jclass clazz, const char *name, const char *sig)
336 m = class_resolvemethod (
338 utf_new_char ((char*) name),
339 utf_new_char ((char*) sig)
342 if (!m) exceptionptr = native_new_and_init(class_java_lang_NoSuchMethodError);
347 /******************** JNI-functions for calling instance methods ******************/
349 jobject CallObjectMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
351 log_text("JNI-Call: CallObjectMethod");
357 jobject CallObjectMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
359 log_text("JNI-Call: CallObjectMethodV");
365 jobject CallObjectMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args)
367 log_text("JNI-Call: CallObjectMethodA");
373 jboolean CallBooleanMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
375 log_text("JNI-Call: CallBooleanMethod");
380 jboolean CallBooleanMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
382 log_text("JNI-Call: CallBooleanMethodV");
387 jboolean CallBooleanMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args)
389 log_text("JNI-Call: CallBooleanMethodA");
394 jbyte CallByteMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
396 log_text("JNI-Call: CallByteMethod");
401 jbyte CallByteMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
403 log_text("JNI-Call: CallByteMethodV");
409 jbyte CallByteMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args)
411 log_text("JNI-Call: CallByteMethodA");
417 jchar CallCharMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
419 log_text("JNI-Call: CallCharMethod");
424 jchar CallCharMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
426 log_text("JNI-Call: CallCharMethodV");
432 jchar CallCharMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args)
434 log_text("JNI-Call: CallCharMethodA");
440 jshort CallShortMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
442 log_text("JNI-Call: CallShortMethod");
448 jshort CallShortMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
450 log_text("JNI-Call: CallShortMethodV");
456 jshort CallShortMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args)
458 log_text("JNI-Call: CallShortMethodA");
465 jint CallIntMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
467 log_text("JNI-Call: CallIntMethod");
473 jint CallIntMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
475 log_text("JNI-Call: CallIntMethodV");
481 jint CallIntMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args)
483 log_text("JNI-Call: CallIntMethodA");
490 jlong CallLongMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
492 log_text("JNI-Call: CallLongMethod");
498 jlong CallLongMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
500 log_text("JNI-Call: CallLongMethodV");
506 jlong CallLongMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args)
508 log_text("JNI-Call: CallLongMethodA");
515 jfloat CallFloatMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
517 log_text("JNI-Call: CallFloatMethod");
523 jfloat CallFloatMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
525 log_text("JNI-Call: CallFloatMethodV");
531 jfloat CallFloatMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args)
533 log_text("JNI-Call: CallFloatMethodA");
540 jdouble CallDoubleMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
542 log_text("JNI-Call: CallDoubleMethod");
548 jdouble CallDoubleMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
550 log_text("JNI-Call: CallDoubleMethodV");
556 jdouble CallDoubleMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args)
558 log_text("JNI-Call: CallDoubleMethodA");
565 void CallVoidMethod (JNIEnv *env, jobject obj, jmethodID methodID, ...)
567 log_text("JNI-Call: CallVoidMethod");
572 void CallVoidMethodV (JNIEnv *env, jobject obj, jmethodID methodID, va_list args)
574 log_text("JNI-Call: CallVoidMethodV");
579 void CallVoidMethodA (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args)
581 log_text("JNI-Call: CallVoidMethodA");
587 jobject CallNonvirtualObjectMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
589 log_text("JNI-Call: CallNonvirtualObjectMethod");
595 jobject CallNonvirtualObjectMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
597 log_text("JNI-Call: CallNonvirtualObjectMethodV");
603 jobject CallNonvirtualObjectMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue * args)
605 log_text("JNI-Call: CallNonvirtualObjectMethodA");
612 jboolean CallNonvirtualBooleanMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
614 log_text("JNI-Call: CallNonvirtualBooleanMethod");
620 jboolean CallNonvirtualBooleanMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
622 log_text("JNI-Call: CallNonvirtualBooleanMethodV");
628 jboolean CallNonvirtualBooleanMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue * args)
630 log_text("JNI-Call: CallNonvirtualBooleanMethodA");
637 jbyte CallNonvirtualByteMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
639 log_text("JNI-Call: CallNonvirtualByteMethod");
645 jbyte CallNonvirtualByteMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
647 log_text("JNI-Call: CallNonvirtualByteMethodV");
653 jbyte CallNonvirtualByteMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue *args)
655 log_text("JNI-Call: CallNonvirtualByteMethodA");
662 jchar CallNonvirtualCharMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
664 log_text("JNI-Call: CallNonvirtualCharMethod");
670 jchar CallNonvirtualCharMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
672 log_text("JNI-Call: CallNonvirtualCharMethodV");
678 jchar CallNonvirtualCharMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue *args)
680 log_text("JNI-Call: CallNonvirtualCharMethodA");
687 jshort CallNonvirtualShortMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
689 log_text("JNI-Call: CallNonvirtualShortMethod");
695 jshort CallNonvirtualShortMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
697 log_text("JNI-Call: CallNonvirtualShortMethodV");
703 jshort CallNonvirtualShortMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue *args)
705 log_text("JNI-Call: CallNonvirtualShortMethodA");
712 jint CallNonvirtualIntMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
714 log_text("JNI-Call: CallNonvirtualIntMethod");
720 jint CallNonvirtualIntMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
722 log_text("JNI-Call: CallNonvirtualIntMethodV");
728 jint CallNonvirtualIntMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue *args)
730 log_text("JNI-Call: CallNonvirtualIntMethodA");
737 jlong CallNonvirtualLongMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
739 log_text("JNI-Call: CallNonvirtualLongMethod");
745 jlong CallNonvirtualLongMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
747 log_text("JNI-Call: CallNonvirtualLongMethodV");
753 jlong CallNonvirtualLongMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue *args)
755 log_text("JNI-Call: CallNonvirtualLongMethodA");
762 jfloat CallNonvirtualFloatMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
764 log_text("JNI-Call: CallNonvirtualFloatMethod");
770 jfloat CallNonvirtualFloatMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
772 log_text("JNI-Call: CallNonvirtualFloatMethodV");
778 jfloat CallNonvirtualFloatMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue *args)
780 log_text("JNI-Call: CallNonvirtualFloatMethodA");
787 jdouble CallNonvirtualDoubleMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
789 log_text("JNI-Call: CallNonvirtualDoubleMethod");
795 jdouble CallNonvirtualDoubleMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
797 log_text("JNI-Call: CallNonvirtualDoubleMethodV");
803 jdouble CallNonvirtualDoubleMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue *args)
805 log_text("JNI-Call: CallNonvirtualDoubleMethodA");
812 void CallNonvirtualVoidMethod (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...)
814 log_text("JNI-Call: CallNonvirtualVoidMethod");
818 void CallNonvirtualVoidMethodV (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args)
820 log_text("JNI-Call: CallNonvirtualVoidMethodV");
824 void CallNonvirtualVoidMethodA (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, jvalue * args)
826 log_text("JNI-Call: CallNonvirtualVoidMethodA");
829 /************************* JNI-functions for accessing fields ************************/
831 jfieldID GetFieldID (JNIEnv *env, jclass clazz, const char *name, const char *sig)
835 f = jclass_findfield(clazz,
836 utf_new_char ((char*) name),
837 utf_new_char ((char*) sig)
840 if (!f) exceptionptr = native_new_and_init(class_java_lang_NoSuchFieldError);
845 /*************************** retrieve fieldid, abort on error ************************/
847 jfieldID getFieldID_critical(JNIEnv *env,jclass clazz,const char *name,const char *sig)
849 jfieldID id = env->GetFieldID(env,clazz,name,sig);
850 if (!id) panic("setfield_critical failed");
854 jobject GetObjectField (JNIEnv *env, jobject obj, jfieldID fieldID)
856 return getField(obj,jobject,fieldID);
859 jboolean GetBooleanField (JNIEnv *env, jobject obj, jfieldID fieldID)
861 return getField(obj,jboolean,fieldID);
865 jbyte GetByteField (JNIEnv *env, jobject obj, jfieldID fieldID)
867 return getField(obj,jbyte,fieldID);
871 jchar GetCharField (JNIEnv *env, jobject obj, jfieldID fieldID)
873 return getField(obj,jchar,fieldID);
877 jshort GetShortField (JNIEnv *env, jobject obj, jfieldID fieldID)
879 return getField(obj,jshort,fieldID);
883 jint GetIntField (JNIEnv *env, jobject obj, jfieldID fieldID)
885 return getField(obj,jint,fieldID);
889 jlong GetLongField (JNIEnv *env, jobject obj, jfieldID fieldID)
891 return getField(obj,jlong,fieldID);
895 jfloat GetFloatField (JNIEnv *env, jobject obj, jfieldID fieldID)
897 return getField(obj,jfloat,fieldID);
901 jdouble GetDoubleField (JNIEnv *env, jobject obj, jfieldID fieldID)
903 return getField(obj,jdouble,fieldID);
906 void SetObjectField (JNIEnv *env, jobject obj, jfieldID fieldID, jobject val)
908 setField(obj,jobject,fieldID,val);
912 void SetBooleanField (JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val)
914 setField(obj,jboolean,fieldID,val);
918 void SetByteField (JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val)
920 setField(obj,jbyte,fieldID,val);
924 void SetCharField (JNIEnv *env, jobject obj, jfieldID fieldID, jchar val)
926 setField(obj,jchar,fieldID,val);
930 void SetShortField (JNIEnv *env, jobject obj, jfieldID fieldID, jshort val)
932 setField(obj,jshort,fieldID,val);
936 void SetIntField (JNIEnv *env, jobject obj, jfieldID fieldID, jint val)
938 setField(obj,jint,fieldID,val);
942 void SetLongField (JNIEnv *env, jobject obj, jfieldID fieldID, jlong val)
944 setField(obj,jlong,fieldID,val);
948 void SetFloatField (JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val)
950 setField(obj,jfloat,fieldID,val);
954 void SetDoubleField (JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val)
956 setField(obj,jdouble,fieldID,val);
959 /**************** JNI-functions for calling static methods **********************/
961 jmethodID GetStaticMethodID (JNIEnv *env, jclass clazz, const char *name, const char *sig)
965 m = class_resolvemethod (
967 utf_new_char ((char*) name),
968 utf_new_char ((char*) sig)
971 if (!m) exceptionptr = native_new_and_init(class_java_lang_NoSuchMethodError);
976 jobject CallStaticObjectMethod (JNIEnv *env, jclass clazz, jmethodID methodID, ...)
978 log_text("JNI-Call: CallStaticObjectMethod");
984 jobject CallStaticObjectMethodV (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
986 log_text("JNI-Call: CallStaticObjectMethodV");
992 jobject CallStaticObjectMethodA (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args)
994 log_text("JNI-Call: CallStaticObjectMethodA");
1000 jboolean CallStaticBooleanMethod (JNIEnv *env, jclass clazz, jmethodID methodID, ...)
1002 log_text("JNI-Call: CallStaticBooleanMethod");
1008 jboolean CallStaticBooleanMethodV (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
1010 log_text("JNI-Call: CallStaticBooleanMethodV");
1016 jboolean CallStaticBooleanMethodA (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args)
1018 log_text("JNI-Call: CallStaticBooleanMethodA");
1024 jbyte CallStaticByteMethod (JNIEnv *env, jclass clazz, jmethodID methodID, ...)
1026 log_text("JNI-Call: CallStaticByteMethod");
1032 jbyte CallStaticByteMethodV (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
1034 log_text("JNI-Call: CallStaticByteMethodV");
1040 jbyte CallStaticByteMethodA (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args)
1042 log_text("JNI-Call: CallStaticByteMethodA");
1047 jchar CallStaticCharMethod (JNIEnv *env, jclass clazz, jmethodID methodID, ...)
1049 log_text("JNI-Call: CallStaticCharMethod");
1055 jchar CallStaticCharMethodV (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
1057 log_text("JNI-Call: CallStaticCharMethodV");
1063 jchar CallStaticCharMethodA (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args)
1065 log_text("JNI-Call: CallStaticCharMethodA");
1072 jshort CallStaticShortMethod (JNIEnv *env, jclass clazz, jmethodID methodID, ...)
1074 log_text("JNI-Call: CallStaticShortMethod");
1080 jshort CallStaticShortMethodV (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
1082 log_text("JNI-Call: CallStaticShortMethodV");
1088 jshort CallStaticShortMethodA (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args)
1090 log_text("JNI-Call: CallStaticShortMethodA");
1097 jint CallStaticIntMethod (JNIEnv *env, jclass clazz, jmethodID methodID, ...)
1099 log_text("JNI-Call: CallStaticIntMethod");
1105 jint CallStaticIntMethodV (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
1107 log_text("JNI-Call: CallStaticIntMethodV");
1113 jint CallStaticIntMethodA (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args)
1115 log_text("JNI-Call: CallStaticIntMethodA");
1122 jlong CallStaticLongMethod (JNIEnv *env, jclass clazz, jmethodID methodID, ...)
1124 log_text("JNI-Call: CallStaticLongMethod");
1130 jlong CallStaticLongMethodV (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
1132 log_text("JNI-Call: CallStaticLongMethodV");
1138 jlong CallStaticLongMethodA (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args)
1140 log_text("JNI-Call: CallStaticLongMethodA");
1147 jfloat CallStaticFloatMethod (JNIEnv *env, jclass clazz, jmethodID methodID, ...)
1149 log_text("JNI-Call: CallStaticFloatMethod");
1155 jfloat CallStaticFloatMethodV (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
1157 log_text("JNI-Call: CallStaticFloatMethodV");
1163 jfloat CallStaticFloatMethodA (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args)
1165 log_text("JNI-Call: CallStaticFloatMethodA");
1172 jdouble CallStaticDoubleMethod (JNIEnv *env, jclass clazz, jmethodID methodID, ...)
1174 log_text("JNI-Call: CallStaticDoubleMethod");
1180 jdouble CallStaticDoubleMethodV (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args)
1182 log_text("JNI-Call: CallStaticDoubleMethodV");
1188 jdouble CallStaticDoubleMethodA (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args)
1190 log_text("JNI-Call: CallStaticDoubleMethodA");
1197 void CallStaticVoidMethod (JNIEnv *env, jclass cls, jmethodID methodID, ...)
1199 log_text("JNI-Call: CallStaticVoidMethod");
1204 void CallStaticVoidMethodV (JNIEnv *env, jclass cls, jmethodID methodID, va_list args)
1206 log_text("JNI-Call: CallStaticVoidMethodV");
1211 void CallStaticVoidMethodA (JNIEnv *env, jclass cls, jmethodID methodID, jvalue * args)
1213 log_text("JNI-Call: CallStaticVoidMethodA");
1217 /****************** JNI-functions for accessing static fields ********************/
1219 jfieldID GetStaticFieldID (JNIEnv *env, jclass clazz, const char *name, const char *sig)
1223 f = jclass_findfield(clazz,
1224 utf_new_char ((char*) name),
1225 utf_new_char ((char*) sig)
1228 if (!f) exceptionptr = native_new_and_init(class_java_lang_NoSuchFieldError);
1234 jobject GetStaticObjectField (JNIEnv *env, jclass clazz, jfieldID fieldID)
1236 return fieldID->value.a;
1240 jboolean GetStaticBooleanField (JNIEnv *env, jclass clazz, jfieldID fieldID)
1242 return fieldID->value.i;
1246 jbyte GetStaticByteField (JNIEnv *env, jclass clazz, jfieldID fieldID)
1248 return fieldID->value.i;
1252 jchar GetStaticCharField (JNIEnv *env, jclass clazz, jfieldID fieldID)
1254 return fieldID->value.i;
1258 jshort GetStaticShortField (JNIEnv *env, jclass clazz, jfieldID fieldID)
1260 return fieldID->value.i;
1264 jint GetStaticIntField (JNIEnv *env, jclass clazz, jfieldID fieldID)
1266 return fieldID->value.i;
1270 jlong GetStaticLongField (JNIEnv *env, jclass clazz, jfieldID fieldID)
1272 return fieldID->value.l;
1276 jfloat GetStaticFloatField (JNIEnv *env, jclass clazz, jfieldID fieldID)
1278 return fieldID->value.f;
1282 jdouble GetStaticDoubleField (JNIEnv *env, jclass clazz, jfieldID fieldID)
1284 return fieldID->value.d;
1289 void SetStaticObjectField (JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value)
1291 fieldID->value.a = value;
1295 void SetStaticBooleanField (JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value)
1297 fieldID->value.i = value;
1301 void SetStaticByteField (JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value)
1303 fieldID->value.i = value;
1307 void SetStaticCharField (JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value)
1309 fieldID->value.i = value;
1313 void SetStaticShortField (JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value)
1315 fieldID->value.i = value;
1319 void SetStaticIntField (JNIEnv *env, jclass clazz, jfieldID fieldID, jint value)
1321 fieldID->value.i = value;
1325 void SetStaticLongField (JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value)
1327 fieldID->value.l = value;
1331 void SetStaticFloatField (JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value)
1333 fieldID->value.f = value;
1337 void SetStaticDoubleField (JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value)
1339 fieldID->value.d = value;
1343 /***** create new java.lang.String object from an array of Unicode characters ****/
1345 jstring NewString (JNIEnv *env, const jchar *buf, jsize len)
1348 java_lang_String *s;
1351 s = (java_lang_String*) builtin_new (class_java_lang_String);
1352 a = builtin_newarray_char (len);
1354 /* javastring or characterarray could not be created */
1355 if ( (!a) || (!s) ) return NULL;
1358 for (i=0; i<len; i++) a->data[i] = buf[i];
1366 /******************* returns the length of a Java string ***************************/
1368 jsize GetStringLength (JNIEnv *env, jstring str)
1370 return ((java_lang_String*) str)->count;
1374 /******************** convertes javastring to u2-array ****************************/
1376 u2 *javastring_tou2 (jstring so)
1378 java_lang_String *s = (java_lang_String*) so;
1383 if (!s) return NULL;
1386 if (!a) return NULL;
1388 /* allocate memory */
1389 stringbuffer = MNEW( u2 , s->count + 1 );
1392 for (i=0; i<s->count; i++) stringbuffer[i] = a->data[s->offset+i];
1394 /* terminate string */
1395 stringbuffer[i] = '\0';
1397 return stringbuffer;
1400 /********* returns a pointer to an array of Unicode characters of the string *******/
1402 const jchar *GetStringChars (JNIEnv *env, jstring str, jboolean *isCopy)
1404 return javastring_tou2(str);
1407 /**************** native code no longer needs access to chars **********************/
1409 void ReleaseStringChars (JNIEnv *env, jstring str, const jchar *chars)
1411 MFREE(((jchar*) chars),jchar,((java_lang_String*) str)->count);
1414 /************ create new java.lang.String object from utf8-characterarray **********/
1416 jstring NewStringUTF (JNIEnv *env, const char *utf)
1418 log_text("NewStringUTF called");
1421 /****************** returns the utf8 length in bytes of a string *******************/
1423 jsize GetStringUTFLength (JNIEnv *env, jstring string)
1425 java_lang_String *s = (java_lang_String*) string;
1427 return (jsize) u2_utflength(s->value->data, s->count);
1430 /************ converts a Javastring to an array of UTF-8 characters ****************/
1432 const char* GetStringUTFChars (JNIEnv *env, jstring string, jboolean *isCopy)
1434 return javastring_toutf((java_lang_String*) string,false)->text;
1437 /***************** native code no longer needs access to utf ***********************/
1439 void ReleaseStringUTFChars (JNIEnv *env, jstring str, const char* chars)
1441 log_text("JNI-Call: ReleaseStringUTFChars");
1444 /************************** array operations ***************************************/
1446 jsize GetArrayLength (JNIEnv *env, jarray array)
1451 jobjectArray NewObjectArray (JNIEnv *env, jsize len, jclass clazz, jobject init)
1453 java_objectarray *j = builtin_anewarray (len, clazz);
1454 if (!j) exceptionptr = proto_java_lang_OutOfMemoryError;
1458 jobject GetObjectArrayElement (JNIEnv *env, jobjectArray array, jsize index)
1462 if (index<array->header.size)
1463 j = array->data[index];
1465 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1470 void SetObjectArrayElement (JNIEnv *env, jobjectArray array, jsize index, jobject val)
1472 if (index>=array->header.size)
1473 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1476 /* check if the class of value is a subclass of the element class of the array */
1478 if (!builtin_instanceof(val, array->elementtype))
1479 exceptionptr = proto_java_lang_ArrayStoreException;
1481 array->data[index] = val;
1487 jbooleanArray NewBooleanArray (JNIEnv *env, jsize len)
1489 java_booleanarray *j = builtin_newarray_boolean(len);
1490 if (!j) exceptionptr = proto_java_lang_OutOfMemoryError;
1495 jbyteArray NewByteArray (JNIEnv *env, jsize len)
1497 java_bytearray *j = builtin_newarray_byte(len);
1498 if (!j) exceptionptr = proto_java_lang_OutOfMemoryError;
1503 jcharArray NewCharArray (JNIEnv *env, jsize len)
1505 java_chararray *j = builtin_newarray_char(len);
1506 if (!j) exceptionptr = proto_java_lang_OutOfMemoryError;
1511 jshortArray NewShortArray (JNIEnv *env, jsize len)
1513 java_shortarray *j = builtin_newarray_short(len);
1514 if (!j) exceptionptr = proto_java_lang_OutOfMemoryError;
1519 jintArray NewIntArray (JNIEnv *env, jsize len)
1521 java_intarray *j = builtin_newarray_int(len);
1522 if (!j) exceptionptr = proto_java_lang_OutOfMemoryError;
1527 jlongArray NewLongArray (JNIEnv *env, jsize len)
1529 java_longarray *j = builtin_newarray_long(len);
1530 if (!j) exceptionptr = proto_java_lang_OutOfMemoryError;
1535 jfloatArray NewFloatArray (JNIEnv *env, jsize len)
1537 java_floatarray *j = builtin_newarray_float(len);
1538 if (!j) exceptionptr = proto_java_lang_OutOfMemoryError;
1543 jdoubleArray NewDoubleArray (JNIEnv *env, jsize len)
1545 java_doublearray *j = builtin_newarray_double(len);
1546 if (!j) exceptionptr = proto_java_lang_OutOfMemoryError;
1551 jboolean * GetBooleanArrayElements (JNIEnv *env, jbooleanArray array, jboolean *isCopy)
1553 if (isCopy) *isCopy = JNI_FALSE;
1558 jbyte * GetByteArrayElements (JNIEnv *env, jbyteArray array, jboolean *isCopy)
1560 if (isCopy) *isCopy = JNI_FALSE;
1565 jchar * GetCharArrayElements (JNIEnv *env, jcharArray array, jboolean *isCopy)
1567 if (isCopy) *isCopy = JNI_FALSE;
1572 jshort * GetShortArrayElements (JNIEnv *env, jshortArray array, jboolean *isCopy)
1574 if (isCopy) *isCopy = JNI_FALSE;
1579 jint * GetIntArrayElements (JNIEnv *env, jintArray array, jboolean *isCopy)
1581 if (isCopy) *isCopy = JNI_FALSE;
1586 jlong * GetLongArrayElements (JNIEnv *env, jlongArray array, jboolean *isCopy)
1588 if (isCopy) *isCopy = JNI_FALSE;
1593 jfloat * GetFloatArrayElements (JNIEnv *env, jfloatArray array, jboolean *isCopy)
1595 if (isCopy) *isCopy = JNI_FALSE;
1600 jdouble * GetDoubleArrayElements (JNIEnv *env, jdoubleArray array, jboolean *isCopy)
1602 if (isCopy) *isCopy = JNI_FALSE;
1608 void ReleaseBooleanArrayElements (JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode)
1614 void ReleaseByteArrayElements (JNIEnv *env, jbyteArray array, jbyte *elems, jint mode)
1620 void ReleaseCharArrayElements (JNIEnv *env, jcharArray array, jchar *elems, jint mode)
1626 void ReleaseShortArrayElements (JNIEnv *env, jshortArray array, jshort *elems, jint mode)
1632 void ReleaseIntArrayElements (JNIEnv *env, jintArray array, jint *elems, jint mode)
1638 void ReleaseLongArrayElements (JNIEnv *env, jlongArray array, jlong *elems, jint mode)
1644 void ReleaseFloatArrayElements (JNIEnv *env, jfloatArray array, jfloat *elems, jint mode)
1650 void ReleaseDoubleArrayElements (JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode)
1655 void GetBooleanArrayRegion (JNIEnv* env, jbooleanArray array, jsize start, jsize len, jboolean *buf)
1657 if (start<0 || len<0 || start+len>array->header.size)
1658 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1660 memcpy(buf,&array->data[start],len*sizeof(array->data[0]));
1664 void GetByteArrayRegion (JNIEnv* env, jbyteArray array, jsize start, jsize len, jbyte *buf)
1666 if (start<0 || len<0 || start+len>array->header.size)
1667 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1669 memcpy(buf,&array->data[start],len*sizeof(array->data[0]));
1673 void GetCharArrayRegion (JNIEnv* env, jcharArray array, jsize start, jsize len, jchar *buf)
1675 if (start<0 || len<0 || start+len>array->header.size)
1676 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1678 memcpy(buf,&array->data[start],len*sizeof(array->data[0]));
1682 void GetShortArrayRegion (JNIEnv* env, jshortArray array, jsize start, jsize len, jshort *buf)
1684 if (start<0 || len<0 || start+len>array->header.size)
1685 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1687 memcpy(buf,&array->data[start],len*sizeof(array->data[0]));
1691 void GetIntArrayRegion (JNIEnv* env, jintArray array, jsize start, jsize len, jint *buf)
1693 if (start<0 || len<0 || start+len>array->header.size)
1694 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1696 memcpy(buf,&array->data[start],len*sizeof(array->data[0]));
1700 void GetLongArrayRegion (JNIEnv* env, jlongArray array, jsize start, jsize len, jlong *buf)
1702 if (start<0 || len<0 || start+len>array->header.size)
1703 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1705 memcpy(buf,&array->data[start],len*sizeof(array->data[0]));
1709 void GetFloatArrayRegion (JNIEnv* env, jfloatArray array, jsize start, jsize len, jfloat *buf)
1711 if (start<0 || len<0 || start+len>array->header.size)
1712 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1714 memcpy(buf,&array->data[start],len*sizeof(array->data[0]));
1718 void GetDoubleArrayRegion (JNIEnv* env, jdoubleArray array, jsize start, jsize len, jdouble *buf)
1720 if (start<0 || len<0 || start+len>array->header.size)
1721 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1723 memcpy(buf,&array->data[start],len*sizeof(array->data[0]));
1727 void SetBooleanArrayRegion (JNIEnv* env, jbooleanArray array, jsize start, jsize len, jboolean *buf)
1729 if (start<0 || len<0 || start+len>array->header.size)
1730 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1732 memcpy(&array->data[start],buf,len*sizeof(array->data[0]));
1736 void SetByteArrayRegion (JNIEnv* env, jbyteArray array, jsize start, jsize len, jbyte *buf)
1738 if (start<0 || len<0 || start+len>array->header.size)
1739 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1741 memcpy(&array->data[start],buf,len*sizeof(array->data[0]));
1745 void SetCharArrayRegion (JNIEnv* env, jcharArray array, jsize start, jsize len, jchar *buf)
1747 if (start<0 || len<0 || start+len>array->header.size)
1748 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1750 memcpy(&array->data[start],buf,len*sizeof(array->data[0]));
1755 void SetShortArrayRegion (JNIEnv* env, jshortArray array, jsize start, jsize len, jshort *buf)
1757 if (start<0 || len<0 || start+len>array->header.size)
1758 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1760 memcpy(&array->data[start],buf,len*sizeof(array->data[0]));
1764 void SetIntArrayRegion (JNIEnv* env, jintArray array, jsize start, jsize len, jint *buf)
1766 if (start<0 || len<0 || start+len>array->header.size)
1767 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1769 memcpy(&array->data[start],buf,len*sizeof(array->data[0]));
1773 void SetLongArrayRegion (JNIEnv* env, jlongArray array, jsize start, jsize len, jlong *buf)
1775 if (start<0 || len<0 || start+len>array->header.size)
1776 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1778 memcpy(&array->data[start],buf,len*sizeof(array->data[0]));
1782 void SetFloatArrayRegion (JNIEnv* env, jfloatArray array, jsize start, jsize len, jfloat *buf)
1784 if (start<0 || len<0 || start+len>array->header.size)
1785 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1787 memcpy(&array->data[start],buf,len*sizeof(array->data[0]));
1791 void SetDoubleArrayRegion (JNIEnv* env, jdoubleArray array, jsize start, jsize len, jdouble *buf)
1793 if (start<0 || len<0 || start+len>array->header.size)
1794 exceptionptr = proto_java_lang_ArrayIndexOutOfBoundsException;
1796 memcpy(&array->data[start],buf,len*sizeof(array->data[0]));
1799 jint RegisterNatives (JNIEnv* env, jclass clazz, const JNINativeMethod *methods, jint nMethods)
1801 log_text("JNI-Call: RegisterNatives");
1806 jint UnregisterNatives (JNIEnv* env, jclass clazz)
1808 log_text("JNI-Call: UnregisterNatives");
1812 /******************************* monitor operations ********************************/
1814 jint MonitorEnter (JNIEnv* env, jobject obj)
1816 builtin_monitorenter(obj);
1821 jint MonitorExit (JNIEnv* env, jobject obj)
1823 builtin_monitorexit(obj);
1828 /************************************* JavaVM interface ****************************/
1830 jint GetJavaVM (JNIEnv* env, JavaVM **vm)
1832 log_text("JNI-Call: GetJavaVM");
1836 void GetStringRegion (JNIEnv* env, jstring str, jsize start, jsize len, jchar *buf)
1838 log_text("JNI-Call: GetStringRegion");
1842 void GetStringUTFRegion (JNIEnv* env, jstring str, jsize start, jsize len, char *buf)
1844 log_text("JNI-Call: GetStringUTFRegion");
1848 /****************** obtain direct pointer to array elements ***********************/
1850 void * GetPrimitiveArrayCritical (JNIEnv* env, jarray array, jboolean *isCopy)
1852 java_arrayheader *s = (java_arrayheader*) array;
1854 switch (s->arraytype) {
1855 case ARRAYTYPE_BYTE: return (((java_bytearray*) array)->data);
1856 case ARRAYTYPE_BOOLEAN: return (((java_booleanarray*) array)->data);
1857 case ARRAYTYPE_CHAR: return (((java_chararray*) array)->data);
1858 case ARRAYTYPE_SHORT: return (((java_shortarray*) array)->data);
1859 case ARRAYTYPE_INT: return (((java_intarray*) array)->data);
1860 case ARRAYTYPE_LONG: return (((java_longarray*) array)->data);
1861 case ARRAYTYPE_FLOAT: return (((java_floatarray*) array)->data);
1862 case ARRAYTYPE_DOUBLE: return (((java_doublearray*) array)->data);
1863 case ARRAYTYPE_OBJECT: return (((java_objectarray*) array)->data);
1864 case ARRAYTYPE_ARRAY: return (((java_arrayarray*) array)->data);
1871 void ReleasePrimitiveArrayCritical (JNIEnv* env, jarray array, void *carray, jint mode)
1873 log_text("JNI-Call: ReleasePrimitiveArrayCritical");
1878 /********* returns a pointer to an array of Unicode characters of the string *******/
1880 const jchar * GetStringCritical (JNIEnv* env, jstring string, jboolean *isCopy)
1882 log_text("JNI-Call: GetStringCritical");
1884 return GetStringChars(env,string,isCopy);
1887 /**************** native code no longer needs access to chars **********************/
1889 void ReleaseStringCritical (JNIEnv* env, jstring string, const jchar *cstring)
1891 log_text("JNI-Call: ReleaseStringCritical");
1893 ReleaseStringChars(env,string,cstring);
1897 jweak NewWeakGlobalRef (JNIEnv* env, jobject obj)
1899 log_text("JNI-Call: NewWeakGlobalRef");
1905 void DeleteWeakGlobalRef (JNIEnv* env, jweak ref)
1907 log_text("JNI-Call: DeleteWeakGlobalRef");
1913 /******************************* check for pending exception ***********************/
1916 jboolean ExceptionCheck (JNIEnv* env)
1918 log_text("JNI-Call: ExceptionCheck");
1920 return exceptionptr ? JNI_TRUE : JNI_FALSE;
1923 /********************************* JNI function table ******************************/
1934 &FromReflectedMethod,
1935 &FromReflectedField,
1953 &EnsureLocalCapacity,
1965 &CallBooleanMethodV,
1966 &CallBooleanMethodA,
1991 &CallNonvirtualObjectMethod,
1992 &CallNonvirtualObjectMethodV,
1993 &CallNonvirtualObjectMethodA,
1994 &CallNonvirtualBooleanMethod,
1995 &CallNonvirtualBooleanMethodV,
1996 &CallNonvirtualBooleanMethodA,
1997 &CallNonvirtualByteMethod,
1998 &CallNonvirtualByteMethodV,
1999 &CallNonvirtualByteMethodA,
2000 &CallNonvirtualCharMethod,
2001 &CallNonvirtualCharMethodV,
2002 &CallNonvirtualCharMethodA,
2003 &CallNonvirtualShortMethod,
2004 &CallNonvirtualShortMethodV,
2005 &CallNonvirtualShortMethodA,
2006 &CallNonvirtualIntMethod,
2007 &CallNonvirtualIntMethodV,
2008 &CallNonvirtualIntMethodA,
2009 &CallNonvirtualLongMethod,
2010 &CallNonvirtualLongMethodV,
2011 &CallNonvirtualLongMethodA,
2012 &CallNonvirtualFloatMethod,
2013 &CallNonvirtualFloatMethodV,
2014 &CallNonvirtualFloatMethodA,
2015 &CallNonvirtualDoubleMethod,
2016 &CallNonvirtualDoubleMethodV,
2017 &CallNonvirtualDoubleMethodA,
2018 &CallNonvirtualVoidMethod,
2019 &CallNonvirtualVoidMethodV,
2020 &CallNonvirtualVoidMethodA,
2041 &CallStaticObjectMethod,
2042 &CallStaticObjectMethodV,
2043 &CallStaticObjectMethodA,
2044 &CallStaticBooleanMethod,
2045 &CallStaticBooleanMethodV,
2046 &CallStaticBooleanMethodA,
2047 &CallStaticByteMethod,
2048 &CallStaticByteMethodV,
2049 &CallStaticByteMethodA,
2050 &CallStaticCharMethod,
2051 &CallStaticCharMethodV,
2052 &CallStaticCharMethodA,
2053 &CallStaticShortMethod,
2054 &CallStaticShortMethodV,
2055 &CallStaticShortMethodA,
2056 &CallStaticIntMethod,
2057 &CallStaticIntMethodV,
2058 &CallStaticIntMethodA,
2059 &CallStaticLongMethod,
2060 &CallStaticLongMethodV,
2061 &CallStaticLongMethodA,
2062 &CallStaticFloatMethod,
2063 &CallStaticFloatMethodV,
2064 &CallStaticFloatMethodA,
2065 &CallStaticDoubleMethod,
2066 &CallStaticDoubleMethodV,
2067 &CallStaticDoubleMethodA,
2068 &CallStaticVoidMethod,
2069 &CallStaticVoidMethodV,
2070 &CallStaticVoidMethodA,
2072 &GetStaticObjectField,
2073 &GetStaticBooleanField,
2074 &GetStaticByteField,
2075 &GetStaticCharField,
2076 &GetStaticShortField,
2078 &GetStaticLongField,
2079 &GetStaticFloatField,
2080 &GetStaticDoubleField,
2081 &SetStaticObjectField,
2082 &SetStaticBooleanField,
2083 &SetStaticByteField,
2084 &SetStaticCharField,
2085 &SetStaticShortField,
2087 &SetStaticLongField,
2088 &SetStaticFloatField,
2089 &SetStaticDoubleField,
2093 &ReleaseStringChars,
2095 &GetStringUTFLength,
2097 &ReleaseStringUTFChars,
2100 &GetObjectArrayElement,
2101 &SetObjectArrayElement,
2110 &GetBooleanArrayElements,
2111 &GetByteArrayElements,
2112 &GetCharArrayElements,
2113 &GetShortArrayElements,
2114 &GetIntArrayElements,
2115 &GetLongArrayElements,
2116 &GetFloatArrayElements,
2117 &GetDoubleArrayElements,
2118 &ReleaseBooleanArrayElements,
2119 &ReleaseByteArrayElements,
2120 &ReleaseCharArrayElements,
2121 &ReleaseShortArrayElements,
2122 &ReleaseIntArrayElements,
2123 &ReleaseLongArrayElements,
2124 &ReleaseFloatArrayElements,
2125 &ReleaseDoubleArrayElements,
2126 &GetBooleanArrayRegion,
2127 &GetByteArrayRegion,
2128 &GetCharArrayRegion,
2129 &GetShortArrayRegion,
2131 &GetLongArrayRegion,
2132 &GetFloatArrayRegion,
2133 &GetDoubleArrayRegion,
2134 &SetBooleanArrayRegion,
2135 &SetByteArrayRegion,
2136 &SetCharArrayRegion,
2137 &SetShortArrayRegion,
2139 &SetLongArrayRegion,
2140 &SetFloatArrayRegion,
2141 &SetDoubleArrayRegion,
2148 &GetStringUTFRegion,
2149 &GetPrimitiveArrayCritical,
2150 &ReleasePrimitiveArrayCritical,
2152 &ReleaseStringCritical,
2154 &DeleteWeakGlobalRef,