1 /******************************** jni.h ***************************************
3 contains Java Native Interface types and data structures
4 includes layout of the JNI function table
6 *******************************************************************************/
15 #define jobject java_objectheader*
16 #define jclass struct classinfo*
17 #define jthrowable jobject
19 #define jarray java_arrayheader*
20 #define jlongArray java_longarray*
21 #define jbooleanArray java_booleanarray*
22 #define jintArray java_intarray*
23 #define jcharArray java_chararray*
24 #define jbyteArray java_bytearray*
25 #define jshortArray java_shortarray*
26 #define jdoubleArray java_doublearray*
27 #define jfloatArray java_floatarray*
28 #define jobjectArray java_objectarray*
29 #define jstring jobject
37 #define jdouble double
39 #define jfieldID fieldinfo*
40 #define jmethodID methodinfo*
42 struct _JavaVM; /* opaque structure */
43 typedef struct _JavaVM* JavaVM;
45 typedef union jvalue {
62 /* native method name, signature and function pointer for use in RegisterNatives */
72 JNI function table, contains functions for the following usages:
77 Global and Local References
79 Accessing Fields of Objects
80 Calling Instance Methods
81 Accessing Static Fields
82 Calling Static Methods
85 Registering Native Methods
90 typedef struct JNI_Table JNIEnv;
94 /* reserverd for future JNI-functions */
100 /* version information */
102 jint (*GetVersion) (JNIEnv*);
104 /* class operations */
106 jclass (*DefineClass) (JNIEnv*, const char *name, jobject loader, const jbyte *buf, jsize len);
107 jclass (*FindClass) (JNIEnv*, const char *name);
109 jmethodID (*FromReflectedMethod) (JNIEnv*, jobject method);
110 jfieldID (*FromReflectedField) (JNIEnv*, jobject field);
112 jobject (*ToReflectedMethod) (JNIEnv*, jclass cls, jmethodID methodID, jboolean isStatic);
114 jclass (*GetSuperclass) (JNIEnv*, jclass sub);
115 jboolean (*IsAssignableForm) (JNIEnv*, jclass sub, jclass sup);
117 jobject (*ToReflectedField) (JNIEnv*, jclass cls, jfieldID fieldID, jboolean isStatic);
121 jint (*Throw) (JNIEnv*, jthrowable obj);
122 jint (*ThrowNew) (JNIEnv*, jclass clazz, const char *msg);
123 jthrowable (*ExceptionOccurred) (JNIEnv*);
124 void (*ExceptionDescribe) (JNIEnv*);
125 void (*ExceptionClear) (JNIEnv*);
126 void (*FatalError) (JNIEnv*, const char *msg);
128 /* global and local references */
130 jint (*PushLocalFrame) (JNIEnv*, jint capacity);
131 jobject (*PopLocalFrame) (JNIEnv*, jobject result);
133 jobject (*NewGlobalRef) (JNIEnv*, jobject lobj);
134 void (*DeleteGlobalRef) (JNIEnv*, jobject gref);
135 void (*DeleteLocalRef) (JNIEnv*, jobject obj);
136 jboolean (*IsSameObject) (JNIEnv*, jobject obj1, jobject obj2);
137 jobject (*NewLocalRef) (JNIEnv*, jobject ref);
138 jint (*EnsureLocalCapacity) (JNIEnv*, jint capacity);
140 /* object operations */
142 jobject (*AllocObject) (JNIEnv*, jclass clazz);
143 jobject (*NewObject) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
144 jobject (*NewObjectV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
145 jobject (*NewObjectA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
147 jclass (*GetObjectClass) (JNIEnv*, jobject obj);
148 jboolean (*IsInstanceOf) (JNIEnv*, jobject obj, jclass clazz);
150 jmethodID (*GetMethodID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
152 /* calling instance methods */
154 jobject (*CallObjectMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
155 jobject (*CallObjectMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
156 jobject (*CallObjectMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args);
158 jboolean (*CallBooleanMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
159 jboolean (*CallBooleanMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
160 jboolean (*CallBooleanMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args);
162 jbyte (*CallByteMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
163 jbyte (*CallByteMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
164 jbyte (*CallByteMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
166 jchar (*CallCharMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
167 jchar (*CallCharMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
168 jchar (*CallCharMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
170 jshort (*CallShortMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
171 jshort (*CallShortMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
172 jshort (*CallShortMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
174 jint (*CallIntMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
175 jint (*CallIntMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
176 jint (*CallIntMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
178 jlong (*CallLongMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
179 jlong (*CallLongMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
180 jlong (*CallLongMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
182 jfloat (*CallFloatMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
183 jfloat (*CallFloatMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
184 jfloat (*CallFloatMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
186 jdouble (*CallDoubleMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
187 jdouble (*CallDoubleMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
188 jdouble (*CallDoubleMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
190 void (*CallVoidMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
191 void (*CallVoidMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
192 void (*CallVoidMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args);
194 jobject (*CallNonvirtualObjectMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
195 jobject (*CallNonvirtualObjectMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
196 jobject (*CallNonvirtualObjectMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args);
198 jboolean (*CallNonvirtualBooleanMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
199 jboolean (*CallNonvirtualBooleanMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
200 jboolean (*CallNonvirtualBooleanMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args);
202 jbyte (*CallNonvirtualByteMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
203 jbyte (*CallNonvirtualByteMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
204 jbyte (*CallNonvirtualByteMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
206 jchar (*CallNonvirtualCharMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
207 jchar (*CallNonvirtualCharMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
208 jchar (*CallNonvirtualCharMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
210 jshort (*CallNonvirtualShortMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
211 jshort (*CallNonvirtualShortMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
212 jshort (*CallNonvirtualShortMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
214 jint (*CallNonvirtualIntMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
215 jint (*CallNonvirtualIntMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
216 jint (*CallNonvirtualIntMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
218 jlong (*CallNonvirtualLongMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
219 jlong (*CallNonvirtualLongMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
220 jlong (*CallNonvirtualLongMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
222 jfloat (*CallNonvirtualFloatMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
223 jfloat (*CallNonvirtualFloatMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
224 jfloat (*CallNonvirtualFloatMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
226 jdouble (*CallNonvirtualDoubleMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
227 jdouble (*CallNonvirtualDoubleMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
228 jdouble (*CallNonvirtualDoubleMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
230 void (*CallNonvirtualVoidMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
231 void (*CallNonvirtualVoidMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
232 void (*CallNonvirtualVoidMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args);
234 /* accessing fields */
236 jfieldID (*GetFieldID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
238 jobject (*GetObjectField) (JNIEnv*, jobject obj, jfieldID fieldID);
239 jboolean (*GetBooleanField) (JNIEnv*, jobject obj, jfieldID fieldID);
240 jbyte (*GetByteField) (JNIEnv*, jobject obj, jfieldID fieldID);
241 jchar (*GetCharField) (JNIEnv*, jobject obj, jfieldID fieldID);
242 jshort (*GetShortField) (JNIEnv*, jobject obj, jfieldID fieldID);
243 jint (*GetIntField) (JNIEnv*, jobject obj, jfieldID fieldID);
244 jlong (*GetLongField) (JNIEnv*, jobject obj, jfieldID fieldID);
245 jfloat (*GetFloatField) (JNIEnv*, jobject obj, jfieldID fieldID);
246 jdouble (*GetDoubleField) (JNIEnv*, jobject obj, jfieldID fieldID);
248 void (*SetObjectField) (JNIEnv*, jobject obj, jfieldID fieldID, jobject val);
249 void (*SetBooleanField) (JNIEnv*, jobject obj, jfieldID fieldID, jboolean val);
250 void (*SetByteField) (JNIEnv*, jobject obj, jfieldID fieldID, jbyte val);
251 void (*SetCharField) (JNIEnv*, jobject obj, jfieldID fieldID, jchar val);
252 void (*SetShortField) (JNIEnv*, jobject obj, jfieldID fieldID, jshort val);
253 void (*SetIntField) (JNIEnv*, jobject obj, jfieldID fieldID, jint val);
254 void (*SetLongField) (JNIEnv*, jobject obj, jfieldID fieldID, jlong val);
255 void (*SetFloatField) (JNIEnv*, jobject obj, jfieldID fieldID, jfloat val);
256 void (*SetDoubleField) (JNIEnv*, jobject obj, jfieldID fieldID, jdouble val);
258 /* calling static methods */
260 jmethodID (*GetStaticMethodID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
262 jobject (*CallStaticObjectMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
263 jobject (*CallStaticObjectMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
264 jobject (*CallStaticObjectMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
266 jboolean (*CallStaticBooleanMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
267 jboolean (*CallStaticBooleanMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
268 jboolean (*CallStaticBooleanMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
270 jbyte (*CallStaticByteMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
271 jbyte (*CallStaticByteMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
272 jbyte (*CallStaticByteMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
274 jchar (*CallStaticCharMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
275 jchar (*CallStaticCharMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
276 jchar (*CallStaticCharMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
278 jshort (*CallStaticShortMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
279 jshort (*CallStaticShortMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
280 jshort (*CallStaticShortMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
282 jint (*CallStaticIntMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
283 jint (*CallStaticIntMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
284 jint (*CallStaticIntMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
286 jlong (*CallStaticLongMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
287 jlong (*CallStaticLongMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
288 jlong (*CallStaticLongMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
290 jfloat (*CallStaticFloatMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
291 jfloat (*CallStaticFloatMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
292 jfloat (*CallStaticFloatMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
294 jdouble (*CallStaticDoubleMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
295 jdouble (*CallStaticDoubleMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
296 jdouble (*CallStaticDoubleMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
298 void (*CallStaticVoidMethod) (JNIEnv*, jclass cls, jmethodID methodID, ...);
299 void (*CallStaticVoidMethodV) (JNIEnv*, jclass cls, jmethodID methodID, va_list args);
300 void (*CallStaticVoidMethodA) (JNIEnv*, jclass cls, jmethodID methodID, jvalue * args);
302 /* accessing static fields */
304 jfieldID (*GetStaticFieldID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
305 jobject (*GetStaticObjectField) (JNIEnv*, jclass clazz, jfieldID fieldID);
306 jboolean (*GetStaticBooleanField) (JNIEnv*, jclass clazz, jfieldID fieldID);
307 jbyte (*GetStaticByteField) (JNIEnv*, jclass clazz, jfieldID fieldID);
308 jchar (*GetStaticCharField) (JNIEnv*, jclass clazz, jfieldID fieldID);
309 jshort (*GetStaticShortField) (JNIEnv*, jclass clazz, jfieldID fieldID);
310 jint (*GetStaticIntField) (JNIEnv*, jclass clazz, jfieldID fieldID);
311 jlong (*GetStaticLongField) (JNIEnv*, jclass clazz, jfieldID fieldID);
312 jfloat (*GetStaticFloatField) (JNIEnv*, jclass clazz, jfieldID fieldID);
313 jdouble (*GetStaticDoubleField) (JNIEnv*, jclass clazz, jfieldID fieldID);
315 void (*SetStaticObjectField) (JNIEnv*, jclass clazz, jfieldID fieldID, jobject value);
316 void (*SetStaticBooleanField) (JNIEnv*, jclass clazz, jfieldID fieldID, jboolean value);
317 void (*SetStaticByteField) (JNIEnv*, jclass clazz, jfieldID fieldID, jbyte value);
318 void (*SetStaticCharField) (JNIEnv*, jclass clazz, jfieldID fieldID, jchar value);
319 void (*SetStaticShortField) (JNIEnv*, jclass clazz, jfieldID fieldID, jshort value);
320 void (*SetStaticIntField) (JNIEnv*, jclass clazz, jfieldID fieldID, jint value);
321 void (*SetStaticLongField) (JNIEnv*, jclass clazz, jfieldID fieldID, jlong value);
322 void (*SetStaticFloatField) (JNIEnv*, jclass clazz, jfieldID fieldID, jfloat value);
323 void (*SetStaticDoubleField) (JNIEnv*, jclass clazz, jfieldID fieldID, jdouble value);
325 /* string operations */
327 jstring (*NewString) (JNIEnv*, const jchar *unicode, jsize len);
328 jsize (*GetStringLength) (JNIEnv*, jstring str);
329 const jchar *(*GetStringChars) (JNIEnv*, jstring str, jboolean *isCopy);
330 void (*ReleaseStringChars) (JNIEnv*, jstring str, const jchar *chars);
332 jstring (*NewStringUTF) (JNIEnv*, const char *utf);
333 jsize (*GetStringUTFLength) (JNIEnv*, jstring str);
334 const char* (*GetStringUTFChars) (JNIEnv*, jstring str, jboolean *isCopy);
335 void (*ReleaseStringUTFChars) (JNIEnv*, jstring str, const char* chars);
337 /* array operations */
339 jsize (*GetArrayLength) (JNIEnv*, jarray array);
341 jobjectArray (*NewObjectArray) (JNIEnv*, jsize len, jclass clazz, jobject init);
342 jobject (*GetObjectArrayElement) (JNIEnv*, jobjectArray array, jsize index);
343 void (*SetObjectArrayElement) (JNIEnv*, jobjectArray array, jsize index, jobject val);
345 jbooleanArray (*NewBooleanArray) (JNIEnv*, jsize len);
346 jbyteArray (*NewByteArray) (JNIEnv*, jsize len);
347 jcharArray (*NewCharArray) (JNIEnv*, jsize len);
348 jshortArray (*NewShortArray) (JNIEnv*, jsize len);
349 jintArray (*NewIntArray) (JNIEnv*, jsize len);
350 jlongArray (*NewLongArray) (JNIEnv*, jsize len);
351 jfloatArray (*NewFloatArray) (JNIEnv*, jsize len);
352 jdoubleArray (*NewDoubleArray) (JNIEnv*, jsize len);
354 jboolean * (*GetBooleanArrayElements) (JNIEnv*, jbooleanArray array, jboolean *isCopy);
355 jbyte * (*GetByteArrayElements) (JNIEnv*, jbyteArray array, jboolean *isCopy);
356 jchar * (*GetCharArrayElements) (JNIEnv*, jcharArray array, jboolean *isCopy);
357 jshort * (*GetShortArrayElements) (JNIEnv*, jshortArray array, jboolean *isCopy);
358 jint * (*GetIntArrayElements) (JNIEnv*, jintArray array, jboolean *isCopy);
359 jlong * (*GetLongArrayElements) (JNIEnv*, jlongArray array, jboolean *isCopy);
360 jfloat * (*GetFloatArrayElements) (JNIEnv*, jfloatArray array, jboolean *isCopy);
361 jdouble * (*GetDoubleArrayElements) (JNIEnv*, jdoubleArray array, jboolean *isCopy);
363 void (*ReleaseBooleanArrayElements) (JNIEnv*, jbooleanArray array, jboolean *elems, jint mode);
364 void (*ReleaseByteArrayElements) (JNIEnv*, jbyteArray array, jbyte *elems, jint mode);
365 void (*ReleaseCharArrayElements) (JNIEnv*, jcharArray array, jchar *elems, jint mode);
366 void (*ReleaseShortArrayElements) (JNIEnv*, jshortArray array, jshort *elems, jint mode);
367 void (*ReleaseIntArrayElements) (JNIEnv*, jintArray array, jint *elems, jint mode);
368 void (*ReleaseLongArrayElements) (JNIEnv*, jlongArray array, jlong *elems, jint mode);
369 void (*ReleaseFloatArrayElements) (JNIEnv*, jfloatArray array, jfloat *elems, jint mode);
370 void (*ReleaseDoubleArrayElements) (JNIEnv*, jdoubleArray array, jdouble *elems, jint mode);
372 void (*GetBooleanArrayRegion) (JNIEnv*, jbooleanArray array, jsize start, jsize l, jboolean *buf);
373 void (*GetByteArrayRegion) (JNIEnv*, jbyteArray array, jsize start, jsize len, jbyte *buf);
374 void (*GetCharArrayRegion) (JNIEnv*, jcharArray array, jsize start, jsize len, jchar *buf);
375 void (*GetShortArrayRegion) (JNIEnv*, jshortArray array, jsize start, jsize len, jshort *buf);
376 void (*GetIntArrayRegion) (JNIEnv*, jintArray array, jsize start, jsize len, jint *buf);
377 void (*GetLongArrayRegion) (JNIEnv*, jlongArray array, jsize start, jsize len, jlong *buf);
378 void (*GetFloatArrayRegion) (JNIEnv*, jfloatArray array, jsize start, jsize len, jfloat *buf);
379 void (*GetDoubleArrayRegion) (JNIEnv*, jdoubleArray array, jsize start, jsize len, jdouble *buf);
381 void (*SetBooleanArrayRegion) (JNIEnv*, jbooleanArray array, jsize start, jsize l, jboolean *buf);
382 void (*SetByteArrayRegion) (JNIEnv*, jbyteArray array, jsize start, jsize len, jbyte *buf);
383 void (*SetCharArrayRegion) (JNIEnv*, jcharArray array, jsize start, jsize len, jchar *buf);
384 void (*SetShortArrayRegion) (JNIEnv*, jshortArray array, jsize start, jsize len, jshort *buf);
385 void (*SetIntArrayRegion) (JNIEnv*, jintArray array, jsize start, jsize len, jint *buf);
386 void (*SetLongArrayRegion) (JNIEnv*, jlongArray array, jsize start, jsize len, jlong *buf);
387 void (*SetFloatArrayRegion) (JNIEnv*, jfloatArray array, jsize start, jsize len, jfloat *buf);
388 void (*SetDoubleArrayRegion) (JNIEnv*, jdoubleArray array, jsize start, jsize len, jdouble *buf);
390 /* registering native methods */
392 jint (*RegisterNatives) (JNIEnv*, jclass clazz, const JNINativeMethod *methods, jint nMethods);
393 jint (*UnregisterNatives) (JNIEnv*, jclass clazz);
395 /* monitor operations */
397 jint (*MonitorEnter) (JNIEnv*, jobject obj);
398 jint (*MonitorExit) (JNIEnv*, jobject obj);
400 /* JavaVM interface */
402 jint (*GetJavaVM) (JNIEnv*, JavaVM **vm);
404 void (*GetStringRegion) (JNIEnv*, jstring str, jsize start, jsize len, jchar *buf);
405 void (*GetStringUTFRegion) (JNIEnv*, jstring str, jsize start, jsize len, char *buf);
407 void * (*GetPrimitiveArrayCritical) (JNIEnv*, jarray array, jboolean *isCopy);
408 void (*ReleasePrimitiveArrayCritical) (JNIEnv*, jarray array, void *carray, jint mode);
410 const jchar * (*GetStringCritical) (JNIEnv*, jstring string, jboolean *isCopy);
411 void (*ReleaseStringCritical) (JNIEnv*, jstring string, const jchar *cstring);
413 jweak (*NewWeakGlobalRef) (JNIEnv*, jobject obj);
414 void (*DeleteWeakGlobalRef) (JNIEnv*, jweak ref);
416 jboolean (*ExceptionCheck) (JNIEnv*);
420 /* the active JNI function table */