• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* ***** BEGIN LICENSE BLOCK *****
2  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
3  *
4  * The contents of this file are subject to the Mozilla Public License Version
5  * 1.1 (the "License"); you may not use this file except in compliance with
6  * the License. You may obtain a copy of the License at
7  * http://www.mozilla.org/MPL/
8  *
9  * Software distributed under the License is distributed on an "AS IS" basis,
10  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
11  * for the specific language governing rights and limitations under the
12  * License.
13  *
14  * The Original Code is the Java Runtime Interface.
15  *
16  * The Initial Developer of the Original Code is
17  * Netscape Communications Corporation and Sun Microsystems, Inc.
18  * Portions created by the Initial Developer are Copyright (C) 1993-1996
19  * the Initial Developer. All Rights Reserved.
20  *
21  * Contributor(s):
22  *
23  * Alternatively, the contents of this file may be used under the terms of
24  * either the GNU General Public License Version 2 or later (the "GPL"), or
25  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
26  * in which case the provisions of the GPL or the LGPL are applicable instead
27  * of those above. If you wish to allow use of your version of this file only
28  * under the terms of either the GPL or the LGPL, and not to allow others to
29  * use your version of this file under the terms of the MPL, indicate your
30  * decision by deleting the provisions above and replace them with the notice
31  * and other provisions required by the GPL or the LGPL. If you do not delete
32  * the provisions above, a recipient may use your version of this file under
33  * the terms of any one of the MPL, the GPL or the LGPL.
34  *
35  * ***** END LICENSE BLOCK ***** */
36 
37 #ifndef JNI_H
38 #define JNI_H
39 
40 #include <stdio.h>
41 #include <stdarg.h>
42 
43 /* jni_md.h contains the machine-dependent typedefs for jbyte, jint
44    and jlong */
45 
46 #include "jni_md.h"
47 
48 #ifdef __cplusplus
49 extern "C" {
50 #endif
51 
52 /*
53  * JNI Types
54  */
55 
56 typedef unsigned char	jboolean;
57 typedef unsigned short	jchar;
58 typedef short		jshort;
59 typedef float		jfloat;
60 typedef double		jdouble;
61 
62 typedef jint            jsize;
63 
64 #ifdef __cplusplus
65 
66 class _jobject {};
67 class _jclass : public _jobject {};
68 class _jthrowable : public _jobject {};
69 class _jstring : public _jobject {};
70 class _jarray : public _jobject {};
71 class _jbooleanArray : public _jarray {};
72 class _jbyteArray : public _jarray {};
73 class _jcharArray : public _jarray {};
74 class _jshortArray : public _jarray {};
75 class _jintArray : public _jarray {};
76 class _jlongArray : public _jarray {};
77 class _jfloatArray : public _jarray {};
78 class _jdoubleArray : public _jarray {};
79 class _jobjectArray : public _jarray {};
80 
81 typedef _jobject *jobject;
82 typedef _jclass *jclass;
83 typedef _jthrowable *jthrowable;
84 typedef _jstring *jstring;
85 typedef _jarray *jarray;
86 typedef _jbooleanArray *jbooleanArray;
87 typedef _jbyteArray *jbyteArray;
88 typedef _jcharArray *jcharArray;
89 typedef _jshortArray *jshortArray;
90 typedef _jintArray *jintArray;
91 typedef _jlongArray *jlongArray;
92 typedef _jfloatArray *jfloatArray;
93 typedef _jdoubleArray *jdoubleArray;
94 typedef _jobjectArray *jobjectArray;
95 
96 #else
97 
98 struct _jobject;
99 
100 typedef struct _jobject *jobject;
101 typedef jobject jclass;
102 typedef jobject jthrowable;
103 typedef jobject jstring;
104 typedef jobject jarray;
105 typedef jarray jbooleanArray;
106 typedef jarray jbyteArray;
107 typedef jarray jcharArray;
108 typedef jarray jshortArray;
109 typedef jarray jintArray;
110 typedef jarray jlongArray;
111 typedef jarray jfloatArray;
112 typedef jarray jdoubleArray;
113 typedef jarray jobjectArray;
114 
115 #endif
116 
117 #if 0	/* moved to jri_md.h */
118 typedef jobject jref; /* For transition---not meant to be part of public
119 			 API anymore.*/
120 #endif
121 
122 typedef union jvalue {
123     jboolean z;
124     jbyte    b;
125     jchar    c;
126     jshort   s;
127     jint     i;
128     jlong    j;
129     jfloat   f;
130     jdouble  d;
131     jobject  l;
132 } jvalue;
133 
134 struct _jfieldID;
135 typedef struct _jfieldID *jfieldID;
136 
137 struct _jmethodID;
138 typedef struct _jmethodID *jmethodID;
139 
140 /*
141  * jboolean constants
142  */
143 
144 #define JNI_FALSE 0
145 #define JNI_TRUE 1
146 
147 /*
148  * possible return values for JNI functions.
149  */
150 
151 #define JNI_OK 0
152 #define JNI_ERR (-1)
153 
154 /*
155  * used in ReleaseScalarArrayElements
156  */
157 
158 #define JNI_COMMIT 1
159 #define JNI_ABORT 2
160 
161 /*
162  * used in RegisterNatives to describe native method name, signature,
163  * and function pointer.
164  */
165 
166 typedef struct {
167     char *name;
168     char *signature;
169     void *fnPtr;
170 } JNINativeMethod;
171 
172 /*
173  * JNI Native Method Interface.
174  */
175 
176 struct JNINativeInterface_;
177 
178 struct JNIEnv_;
179 
180 #ifdef __cplusplus
181 typedef JNIEnv_ JNIEnv;
182 #else
183 typedef const struct JNINativeInterface_ *JNIEnv;
184 #endif
185 
186 /*
187  * JNI Invocation Interface.
188  */
189 
190 struct JNIInvokeInterface_;
191 
192 struct JavaVM_;
193 
194 #ifdef __cplusplus
195 typedef JavaVM_ JavaVM;
196 #else
197 typedef const struct JNIInvokeInterface_ *JavaVM;
198 #endif
199 
200 struct JNINativeInterface_ {
201     void *reserved0;
202     void *reserved1;
203     void *reserved2;
204 
205     void *reserved3;
206     jint (JNICALL *GetVersion)(JNIEnv *env);
207 
208     jclass (JNICALL *DefineClass)
209       (JNIEnv *env, const char *name, jobject loader, const jbyte *buf,
210        jsize len);
211     jclass (JNICALL *FindClass)
212       (JNIEnv *env, const char *name);
213 
214     void *reserved4;
215     void *reserved5;
216     void *reserved6;
217 
218     jclass (JNICALL *GetSuperclass)
219       (JNIEnv *env, jclass sub);
220     jboolean (JNICALL *IsAssignableFrom)
221       (JNIEnv *env, jclass sub, jclass sup);
222     void *reserved7;
223 
224 
225     jint (JNICALL *Throw)
226       (JNIEnv *env, jthrowable obj);
227     jint (JNICALL *ThrowNew)
228       (JNIEnv *env, jclass clazz, const char *msg);
229     jthrowable (JNICALL *ExceptionOccurred)
230       (JNIEnv *env);
231     void (JNICALL *ExceptionDescribe)
232       (JNIEnv *env);
233     void (JNICALL *ExceptionClear)
234       (JNIEnv *env);
235     void (JNICALL *FatalError)
236       (JNIEnv *env, const char *msg);
237     void *reserved8;
238     void *reserved9;
239 
240     jobject (JNICALL *NewGlobalRef)
241       (JNIEnv *env, jobject lobj);
242     void (JNICALL *DeleteGlobalRef)
243       (JNIEnv *env, jobject gref);
244     void (JNICALL *DeleteLocalRef)
245       (JNIEnv *env, jobject obj);
246     jboolean (JNICALL *IsSameObject)
247       (JNIEnv *env, jobject obj1, jobject obj2);
248     void *reserved10;
249     void *reserved11;
250 
251     jobject (JNICALL *AllocObject)
252       (JNIEnv *env, jclass clazz);
253     jobject (JNICALL *NewObject)
254       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
255     jobject (JNICALL *NewObjectV)
256       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
257     jobject (JNICALL *NewObjectA)
258       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
259 
260     jclass (JNICALL *GetObjectClass)
261       (JNIEnv *env, jobject obj);
262     jboolean (JNICALL *IsInstanceOf)
263       (JNIEnv *env, jobject obj, jclass clazz);
264 
265     jmethodID (JNICALL *GetMethodID)
266       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
267 
268     jobject (JNICALL *CallObjectMethod)
269       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
270     jobject (JNICALL *CallObjectMethodV)
271       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
272     jobject (JNICALL *CallObjectMethodA)
273       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);
274 
275     jboolean (JNICALL *CallBooleanMethod)
276       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
277     jboolean (JNICALL *CallBooleanMethodV)
278       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
279     jboolean (JNICALL *CallBooleanMethodA)
280       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);
281 
282     jbyte (JNICALL *CallByteMethod)
283       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
284     jbyte (JNICALL *CallByteMethodV)
285       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
286     jbyte (JNICALL *CallByteMethodA)
287       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
288 
289     jchar (JNICALL *CallCharMethod)
290       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
291     jchar (JNICALL *CallCharMethodV)
292       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
293     jchar (JNICALL *CallCharMethodA)
294       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
295 
296     jshort (JNICALL *CallShortMethod)
297       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
298     jshort (JNICALL *CallShortMethodV)
299       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
300     jshort (JNICALL *CallShortMethodA)
301       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
302 
303     jint (JNICALL *CallIntMethod)
304       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
305     jint (JNICALL *CallIntMethodV)
306       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
307     jint (JNICALL *CallIntMethodA)
308       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
309 
310     jlong (JNICALL *CallLongMethod)
311       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
312     jlong (JNICALL *CallLongMethodV)
313       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
314     jlong (JNICALL *CallLongMethodA)
315       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
316 
317     jfloat (JNICALL *CallFloatMethod)
318       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
319     jfloat (JNICALL *CallFloatMethodV)
320       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
321     jfloat (JNICALL *CallFloatMethodA)
322       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
323 
324     jdouble (JNICALL *CallDoubleMethod)
325       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
326     jdouble (JNICALL *CallDoubleMethodV)
327       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
328     jdouble (JNICALL *CallDoubleMethodA)
329       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
330 
331     void (JNICALL *CallVoidMethod)
332       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
333     void (JNICALL *CallVoidMethodV)
334       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
335     void (JNICALL *CallVoidMethodA)
336       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);
337 
338     jobject (JNICALL *CallNonvirtualObjectMethod)
339       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
340     jobject (JNICALL *CallNonvirtualObjectMethodV)
341       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
342        va_list args);
343     jobject (JNICALL *CallNonvirtualObjectMethodA)
344       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
345        jvalue * args);
346 
347     jboolean (JNICALL *CallNonvirtualBooleanMethod)
348       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
349     jboolean (JNICALL *CallNonvirtualBooleanMethodV)
350       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
351        va_list args);
352     jboolean (JNICALL *CallNonvirtualBooleanMethodA)
353       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
354        jvalue * args);
355 
356     jbyte (JNICALL *CallNonvirtualByteMethod)
357       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
358     jbyte (JNICALL *CallNonvirtualByteMethodV)
359       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
360        va_list args);
361     jbyte (JNICALL *CallNonvirtualByteMethodA)
362       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
363        jvalue *args);
364 
365     jchar (JNICALL *CallNonvirtualCharMethod)
366       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
367     jchar (JNICALL *CallNonvirtualCharMethodV)
368       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
369        va_list args);
370     jchar (JNICALL *CallNonvirtualCharMethodA)
371       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
372        jvalue *args);
373 
374     jshort (JNICALL *CallNonvirtualShortMethod)
375       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
376     jshort (JNICALL *CallNonvirtualShortMethodV)
377       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
378        va_list args);
379     jshort (JNICALL *CallNonvirtualShortMethodA)
380       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
381        jvalue *args);
382 
383     jint (JNICALL *CallNonvirtualIntMethod)
384       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
385     jint (JNICALL *CallNonvirtualIntMethodV)
386       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
387        va_list args);
388     jint (JNICALL *CallNonvirtualIntMethodA)
389       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
390        jvalue *args);
391 
392     jlong (JNICALL *CallNonvirtualLongMethod)
393       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
394     jlong (JNICALL *CallNonvirtualLongMethodV)
395       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
396        va_list args);
397     jlong (JNICALL *CallNonvirtualLongMethodA)
398       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
399        jvalue *args);
400 
401     jfloat (JNICALL *CallNonvirtualFloatMethod)
402       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
403     jfloat (JNICALL *CallNonvirtualFloatMethodV)
404       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
405        va_list args);
406     jfloat (JNICALL *CallNonvirtualFloatMethodA)
407       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
408        jvalue *args);
409 
410     jdouble (JNICALL *CallNonvirtualDoubleMethod)
411       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
412     jdouble (JNICALL *CallNonvirtualDoubleMethodV)
413       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
414        va_list args);
415     jdouble (JNICALL *CallNonvirtualDoubleMethodA)
416       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
417        jvalue *args);
418 
419     void (JNICALL *CallNonvirtualVoidMethod)
420       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
421     void (JNICALL *CallNonvirtualVoidMethodV)
422       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
423        va_list args);
424     void (JNICALL *CallNonvirtualVoidMethodA)
425       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
426        jvalue * args);
427 
428     jfieldID (JNICALL *GetFieldID)
429       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
430 
431     jobject (JNICALL *GetObjectField)
432       (JNIEnv *env, jobject obj, jfieldID fieldID);
433     jboolean (JNICALL *GetBooleanField)
434       (JNIEnv *env, jobject obj, jfieldID fieldID);
435     jbyte (JNICALL *GetByteField)
436       (JNIEnv *env, jobject obj, jfieldID fieldID);
437     jchar (JNICALL *GetCharField)
438       (JNIEnv *env, jobject obj, jfieldID fieldID);
439     jshort (JNICALL *GetShortField)
440       (JNIEnv *env, jobject obj, jfieldID fieldID);
441     jint (JNICALL *GetIntField)
442       (JNIEnv *env, jobject obj, jfieldID fieldID);
443     jlong (JNICALL *GetLongField)
444       (JNIEnv *env, jobject obj, jfieldID fieldID);
445     jfloat (JNICALL *GetFloatField)
446       (JNIEnv *env, jobject obj, jfieldID fieldID);
447     jdouble (JNICALL *GetDoubleField)
448       (JNIEnv *env, jobject obj, jfieldID fieldID);
449 
450     void (JNICALL *SetObjectField)
451       (JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);
452     void (JNICALL *SetBooleanField)
453       (JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);
454     void (JNICALL *SetByteField)
455       (JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);
456     void (JNICALL *SetCharField)
457       (JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);
458     void (JNICALL *SetShortField)
459       (JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);
460     void (JNICALL *SetIntField)
461       (JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
462     void (JNICALL *SetLongField)
463       (JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);
464     void (JNICALL *SetFloatField)
465       (JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);
466     void (JNICALL *SetDoubleField)
467       (JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);
468 
469     jmethodID (JNICALL *GetStaticMethodID)
470       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
471 
472     jobject (JNICALL *CallStaticObjectMethod)
473       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
474     jobject (JNICALL *CallStaticObjectMethodV)
475       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
476     jobject (JNICALL *CallStaticObjectMethodA)
477       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
478 
479     jboolean (JNICALL *CallStaticBooleanMethod)
480       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
481     jboolean (JNICALL *CallStaticBooleanMethodV)
482       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
483     jboolean (JNICALL *CallStaticBooleanMethodA)
484       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
485 
486     jbyte (JNICALL *CallStaticByteMethod)
487       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
488     jbyte (JNICALL *CallStaticByteMethodV)
489       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
490     jbyte (JNICALL *CallStaticByteMethodA)
491       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
492 
493     jchar (JNICALL *CallStaticCharMethod)
494       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
495     jchar (JNICALL *CallStaticCharMethodV)
496       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
497     jchar (JNICALL *CallStaticCharMethodA)
498       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
499 
500     jshort (JNICALL *CallStaticShortMethod)
501       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
502     jshort (JNICALL *CallStaticShortMethodV)
503       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
504     jshort (JNICALL *CallStaticShortMethodA)
505       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
506 
507     jint (JNICALL *CallStaticIntMethod)
508       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
509     jint (JNICALL *CallStaticIntMethodV)
510       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
511     jint (JNICALL *CallStaticIntMethodA)
512       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
513 
514     jlong (JNICALL *CallStaticLongMethod)
515       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
516     jlong (JNICALL *CallStaticLongMethodV)
517       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
518     jlong (JNICALL *CallStaticLongMethodA)
519       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
520 
521     jfloat (JNICALL *CallStaticFloatMethod)
522       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
523     jfloat (JNICALL *CallStaticFloatMethodV)
524       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
525     jfloat (JNICALL *CallStaticFloatMethodA)
526       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
527 
528     jdouble (JNICALL *CallStaticDoubleMethod)
529       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
530     jdouble (JNICALL *CallStaticDoubleMethodV)
531       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
532     jdouble (JNICALL *CallStaticDoubleMethodA)
533       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
534 
535     void (JNICALL *CallStaticVoidMethod)
536       (JNIEnv *env, jclass cls, jmethodID methodID, ...);
537     void (JNICALL *CallStaticVoidMethodV)
538       (JNIEnv *env, jclass cls, jmethodID methodID, va_list args);
539     void (JNICALL *CallStaticVoidMethodA)
540       (JNIEnv *env, jclass cls, jmethodID methodID, jvalue * args);
541 
542     jfieldID (JNICALL *GetStaticFieldID)
543       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
544     jobject (JNICALL *GetStaticObjectField)
545       (JNIEnv *env, jclass clazz, jfieldID fieldID);
546     jboolean (JNICALL *GetStaticBooleanField)
547       (JNIEnv *env, jclass clazz, jfieldID fieldID);
548     jbyte (JNICALL *GetStaticByteField)
549       (JNIEnv *env, jclass clazz, jfieldID fieldID);
550     jchar (JNICALL *GetStaticCharField)
551       (JNIEnv *env, jclass clazz, jfieldID fieldID);
552     jshort (JNICALL *GetStaticShortField)
553       (JNIEnv *env, jclass clazz, jfieldID fieldID);
554     jint (JNICALL *GetStaticIntField)
555       (JNIEnv *env, jclass clazz, jfieldID fieldID);
556     jlong (JNICALL *GetStaticLongField)
557       (JNIEnv *env, jclass clazz, jfieldID fieldID);
558     jfloat (JNICALL *GetStaticFloatField)
559       (JNIEnv *env, jclass clazz, jfieldID fieldID);
560     jdouble (JNICALL *GetStaticDoubleField)
561       (JNIEnv *env, jclass clazz, jfieldID fieldID);
562 
563     void (JNICALL *SetStaticObjectField)
564       (JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value);
565     void (JNICALL *SetStaticBooleanField)
566       (JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value);
567     void (JNICALL *SetStaticByteField)
568       (JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value);
569     void (JNICALL *SetStaticCharField)
570       (JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value);
571     void (JNICALL *SetStaticShortField)
572       (JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value);
573     void (JNICALL *SetStaticIntField)
574       (JNIEnv *env, jclass clazz, jfieldID fieldID, jint value);
575     void (JNICALL *SetStaticLongField)
576       (JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value);
577     void (JNICALL *SetStaticFloatField)
578       (JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value);
579     void (JNICALL *SetStaticDoubleField)
580       (JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value);
581 
582     jstring (JNICALL *NewString)
583       (JNIEnv *env, const jchar *unicode, jsize len);
584     jsize (JNICALL *GetStringLength)
585       (JNIEnv *env, jstring str);
586     const jchar *(JNICALL *GetStringChars)
587       (JNIEnv *env, jstring str, jboolean *isCopy);
588     void (JNICALL *ReleaseStringChars)
589       (JNIEnv *env, jstring str, const jchar *chars);
590 
591     jstring (JNICALL *NewStringUTF)
592       (JNIEnv *env, const char *utf);
593     jsize (JNICALL *GetStringUTFLength)
594       (JNIEnv *env, jstring str);
595     const char* (JNICALL *GetStringUTFChars)
596       (JNIEnv *env, jstring str, jboolean *isCopy);
597     void (JNICALL *ReleaseStringUTFChars)
598       (JNIEnv *env, jstring str, const char* chars);
599 
600 
601     jsize (JNICALL *GetArrayLength)
602       (JNIEnv *env, jarray array);
603 
604     jobjectArray (JNICALL *NewObjectArray)
605       (JNIEnv *env, jsize len, jclass clazz, jobject init);
606     jobject (JNICALL *GetObjectArrayElement)
607       (JNIEnv *env, jobjectArray array, jsize index);
608     void (JNICALL *SetObjectArrayElement)
609       (JNIEnv *env, jobjectArray array, jsize index, jobject val);
610 
611     jbooleanArray (JNICALL *NewBooleanArray)
612       (JNIEnv *env, jsize len);
613     jbyteArray (JNICALL *NewByteArray)
614       (JNIEnv *env, jsize len);
615     jcharArray (JNICALL *NewCharArray)
616       (JNIEnv *env, jsize len);
617     jshortArray (JNICALL *NewShortArray)
618       (JNIEnv *env, jsize len);
619     jintArray (JNICALL *NewIntArray)
620       (JNIEnv *env, jsize len);
621     jlongArray (JNICALL *NewLongArray)
622       (JNIEnv *env, jsize len);
623     jfloatArray (JNICALL *NewFloatArray)
624       (JNIEnv *env, jsize len);
625     jdoubleArray (JNICALL *NewDoubleArray)
626       (JNIEnv *env, jsize len);
627 
628     jboolean * (JNICALL *GetBooleanArrayElements)
629       (JNIEnv *env, jbooleanArray array, jboolean *isCopy);
630     jbyte * (JNICALL *GetByteArrayElements)
631       (JNIEnv *env, jbyteArray array, jboolean *isCopy);
632     jchar * (JNICALL *GetCharArrayElements)
633       (JNIEnv *env, jcharArray array, jboolean *isCopy);
634     jshort * (JNICALL *GetShortArrayElements)
635       (JNIEnv *env, jshortArray array, jboolean *isCopy);
636     jint * (JNICALL *GetIntArrayElements)
637       (JNIEnv *env, jintArray array, jboolean *isCopy);
638     jlong * (JNICALL *GetLongArrayElements)
639       (JNIEnv *env, jlongArray array, jboolean *isCopy);
640     jfloat * (JNICALL *GetFloatArrayElements)
641       (JNIEnv *env, jfloatArray array, jboolean *isCopy);
642     jdouble * (JNICALL *GetDoubleArrayElements)
643       (JNIEnv *env, jdoubleArray array, jboolean *isCopy);
644 
645     void (JNICALL *ReleaseBooleanArrayElements)
646       (JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode);
647     void (JNICALL *ReleaseByteArrayElements)
648       (JNIEnv *env, jbyteArray array, jbyte *elems, jint mode);
649     void (JNICALL *ReleaseCharArrayElements)
650       (JNIEnv *env, jcharArray array, jchar *elems, jint mode);
651     void (JNICALL *ReleaseShortArrayElements)
652       (JNIEnv *env, jshortArray array, jshort *elems, jint mode);
653     void (JNICALL *ReleaseIntArrayElements)
654       (JNIEnv *env, jintArray array, jint *elems, jint mode);
655     void (JNICALL *ReleaseLongArrayElements)
656       (JNIEnv *env, jlongArray array, jlong *elems, jint mode);
657     void (JNICALL *ReleaseFloatArrayElements)
658       (JNIEnv *env, jfloatArray array, jfloat *elems, jint mode);
659     void (JNICALL *ReleaseDoubleArrayElements)
660       (JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode);
661 
662     void (JNICALL *GetBooleanArrayRegion)
663       (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);
664     void (JNICALL *GetByteArrayRegion)
665       (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);
666     void (JNICALL *GetCharArrayRegion)
667       (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);
668     void (JNICALL *GetShortArrayRegion)
669       (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);
670     void (JNICALL *GetIntArrayRegion)
671       (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);
672     void (JNICALL *GetLongArrayRegion)
673       (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);
674     void (JNICALL *GetFloatArrayRegion)
675       (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);
676     void (JNICALL *GetDoubleArrayRegion)
677       (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);
678 
679     void (JNICALL *SetBooleanArrayRegion)
680       (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);
681     void (JNICALL *SetByteArrayRegion)
682       (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);
683     void (JNICALL *SetCharArrayRegion)
684       (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);
685     void (JNICALL *SetShortArrayRegion)
686       (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);
687     void (JNICALL *SetIntArrayRegion)
688       (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);
689     void (JNICALL *SetLongArrayRegion)
690       (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);
691     void (JNICALL *SetFloatArrayRegion)
692       (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);
693     void (JNICALL *SetDoubleArrayRegion)
694       (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);
695 
696     jint (JNICALL *RegisterNatives)
697       (JNIEnv *env, jclass clazz, const JNINativeMethod *methods,
698        jint nMethods);
699     jint (JNICALL *UnregisterNatives)
700       (JNIEnv *env, jclass clazz);
701 
702     jint (JNICALL *MonitorEnter)
703       (JNIEnv *env, jobject obj);
704     jint (JNICALL *MonitorExit)
705       (JNIEnv *env, jobject obj);
706 
707     jint (JNICALL *GetJavaVM)
708       (JNIEnv *env, JavaVM **vm);
709 };
710 
711 /*
712  * We use inlined functions for C++ so that programmers can write:
713  *
714  *    env->FindClass("java/lang/String")
715  *
716  * in C++ rather than:
717  *
718  *    (*env)->FindClass(env, "java/lang/String")
719  *
720  * in C.
721  */
722 
723 struct JNIEnv_ {
724     const struct JNINativeInterface_ *functions;
725     void *reserved0;
726     void *reserved1[6];
727 #ifdef __cplusplus
728 
GetVersionJNIEnv_729     jint GetVersion() {
730         return functions->GetVersion(this);
731     }
DefineClassJNIEnv_732     jclass DefineClass(const char *name, jobject loader, const jbyte *buf,
733 		       jsize len) {
734         return functions->DefineClass(this, name, loader, buf, len);
735     }
FindClassJNIEnv_736     jclass FindClass(const char *name) {
737         return functions->FindClass(this, name);
738     }
GetSuperclassJNIEnv_739     jclass GetSuperclass(jclass sub) {
740         return functions->GetSuperclass(this, sub);
741     }
IsAssignableFromJNIEnv_742     jboolean IsAssignableFrom(jclass sub, jclass sup) {
743         return functions->IsAssignableFrom(this, sub, sup);
744     }
745 
ThrowJNIEnv_746     jint Throw(jthrowable obj) {
747         return functions->Throw(this, obj);
748     }
ThrowNewJNIEnv_749     jint ThrowNew(jclass clazz, const char *msg) {
750         return functions->ThrowNew(this, clazz, msg);
751     }
ExceptionOccurredJNIEnv_752     jthrowable ExceptionOccurred() {
753         return functions->ExceptionOccurred(this);
754     }
ExceptionDescribeJNIEnv_755     void ExceptionDescribe() {
756         functions->ExceptionDescribe(this);
757     }
ExceptionClearJNIEnv_758     void ExceptionClear() {
759         functions->ExceptionClear(this);
760     }
FatalErrorJNIEnv_761     void FatalError(const char *msg) {
762         functions->FatalError(this, msg);
763     }
764 
NewGlobalRefJNIEnv_765     jobject NewGlobalRef(jobject lobj) {
766         return functions->NewGlobalRef(this,lobj);
767     }
DeleteGlobalRefJNIEnv_768     void DeleteGlobalRef(jobject gref) {
769         functions->DeleteGlobalRef(this,gref);
770     }
DeleteLocalRefJNIEnv_771     void DeleteLocalRef(jobject obj) {
772         functions->DeleteLocalRef(this, obj);
773     }
774 
IsSameObjectJNIEnv_775     jboolean IsSameObject(jobject obj1, jobject obj2) {
776         return functions->IsSameObject(this,obj1,obj2);
777     }
778 
AllocObjectJNIEnv_779     jobject AllocObject(jclass clazz) {
780         return functions->AllocObject(this,clazz);
781     }
NewObjectJNIEnv_782     jobject NewObject(jclass clazz, jmethodID methodID, ...) {
783         va_list args;
784 	jobject result;
785 	va_start(args, methodID);
786         result = functions->NewObjectV(this,clazz,methodID,args);
787 	va_end(args);
788 	return result;
789     }
NewObjectVJNIEnv_790     jobject NewObjectV(jclass clazz, jmethodID methodID,
791 		       va_list args) {
792         return functions->NewObjectV(this,clazz,methodID,args);
793     }
NewObjectAJNIEnv_794     jobject NewObjectA(jclass clazz, jmethodID methodID,
795 		       jvalue *args) {
796         return functions->NewObjectA(this,clazz,methodID,args);
797     }
798 
GetObjectClassJNIEnv_799     jclass GetObjectClass(jobject obj) {
800         return functions->GetObjectClass(this,obj);
801     }
IsInstanceOfJNIEnv_802     jboolean IsInstanceOf(jobject obj, jclass clazz) {
803         return functions->IsInstanceOf(this,obj,clazz);
804     }
805 
GetMethodIDJNIEnv_806     jmethodID GetMethodID(jclass clazz, const char *name,
807 			  const char *sig) {
808         return functions->GetMethodID(this,clazz,name,sig);
809     }
810 
CallObjectMethodJNIEnv_811     jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {
812         va_list args;
813 	jobject result;
814 	va_start(args,methodID);
815 	result = functions->CallObjectMethodV(this,obj,methodID,args);
816 	va_end(args);
817 	return result;
818     }
CallObjectMethodVJNIEnv_819     jobject CallObjectMethodV(jobject obj, jmethodID methodID,
820 			va_list args) {
821         return functions->CallObjectMethodV(this,obj,methodID,args);
822     }
CallObjectMethodAJNIEnv_823     jobject CallObjectMethodA(jobject obj, jmethodID methodID,
824 			jvalue * args) {
825         return functions->CallObjectMethodA(this,obj,methodID,args);
826     }
827 
CallBooleanMethodJNIEnv_828     jboolean CallBooleanMethod(jobject obj,
829 			       jmethodID methodID, ...) {
830         va_list args;
831 	jboolean result;
832 	va_start(args,methodID);
833 	result = functions->CallBooleanMethodV(this,obj,methodID,args);
834 	va_end(args);
835 	return result;
836     }
CallBooleanMethodVJNIEnv_837     jboolean CallBooleanMethodV(jobject obj, jmethodID methodID,
838 				va_list args) {
839         return functions->CallBooleanMethodV(this,obj,methodID,args);
840     }
CallBooleanMethodAJNIEnv_841     jboolean CallBooleanMethodA(jobject obj, jmethodID methodID,
842 				jvalue * args) {
843         return functions->CallBooleanMethodA(this,obj,methodID, args);
844     }
845 
CallByteMethodJNIEnv_846     jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {
847         va_list args;
848 	jbyte result;
849 	va_start(args,methodID);
850 	result = functions->CallByteMethodV(this,obj,methodID,args);
851 	va_end(args);
852 	return result;
853     }
CallByteMethodVJNIEnv_854     jbyte CallByteMethodV(jobject obj, jmethodID methodID,
855 			  va_list args) {
856         return functions->CallByteMethodV(this,obj,methodID,args);
857     }
CallByteMethodAJNIEnv_858     jbyte CallByteMethodA(jobject obj, jmethodID methodID,
859 			  jvalue * args) {
860         return functions->CallByteMethodA(this,obj,methodID,args);
861     }
862 
CallCharMethodJNIEnv_863     jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {
864         va_list args;
865 	jchar result;
866 	va_start(args,methodID);
867 	result = functions->CallCharMethodV(this,obj,methodID,args);
868 	va_end(args);
869 	return result;
870     }
CallCharMethodVJNIEnv_871     jchar CallCharMethodV(jobject obj, jmethodID methodID,
872 			  va_list args) {
873         return functions->CallCharMethodV(this,obj,methodID,args);
874     }
CallCharMethodAJNIEnv_875     jchar CallCharMethodA(jobject obj, jmethodID methodID,
876 			  jvalue * args) {
877         return functions->CallCharMethodA(this,obj,methodID,args);
878     }
879 
CallShortMethodJNIEnv_880     jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {
881         va_list args;
882 	jshort result;
883 	va_start(args,methodID);
884 	result = functions->CallShortMethodV(this,obj,methodID,args);
885 	va_end(args);
886 	return result;
887     }
CallShortMethodVJNIEnv_888     jshort CallShortMethodV(jobject obj, jmethodID methodID,
889 			    va_list args) {
890         return functions->CallShortMethodV(this,obj,methodID,args);
891     }
CallShortMethodAJNIEnv_892     jshort CallShortMethodA(jobject obj, jmethodID methodID,
893 			    jvalue * args) {
894         return functions->CallShortMethodA(this,obj,methodID,args);
895     }
896 
CallIntMethodJNIEnv_897     jint CallIntMethod(jobject obj, jmethodID methodID, ...) {
898         va_list args;
899 	jint result;
900 	va_start(args,methodID);
901 	result = functions->CallIntMethodV(this,obj,methodID,args);
902 	va_end(args);
903 	return result;
904     }
CallIntMethodVJNIEnv_905     jint CallIntMethodV(jobject obj, jmethodID methodID,
906 			va_list args) {
907         return functions->CallIntMethodV(this,obj,methodID,args);
908     }
CallIntMethodAJNIEnv_909     jint CallIntMethodA(jobject obj, jmethodID methodID,
910 			jvalue * args) {
911         return functions->CallIntMethodA(this,obj,methodID,args);
912     }
913 
CallLongMethodJNIEnv_914     jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {
915         va_list args;
916 	jlong result;
917 	va_start(args,methodID);
918 	result = functions->CallLongMethodV(this,obj,methodID,args);
919 	va_end(args);
920 	return result;
921     }
CallLongMethodVJNIEnv_922     jlong CallLongMethodV(jobject obj, jmethodID methodID,
923 			  va_list args) {
924         return functions->CallLongMethodV(this,obj,methodID,args);
925     }
CallLongMethodAJNIEnv_926     jlong CallLongMethodA(jobject obj, jmethodID methodID,
927 			  jvalue * args) {
928         return functions->CallLongMethodA(this,obj,methodID,args);
929     }
930 
CallFloatMethodJNIEnv_931     jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {
932         va_list args;
933 	jfloat result;
934 	va_start(args,methodID);
935 	result = functions->CallFloatMethodV(this,obj,methodID,args);
936 	va_end(args);
937 	return result;
938     }
CallFloatMethodVJNIEnv_939     jfloat CallFloatMethodV(jobject obj, jmethodID methodID,
940 			    va_list args) {
941         return functions->CallFloatMethodV(this,obj,methodID,args);
942     }
CallFloatMethodAJNIEnv_943     jfloat CallFloatMethodA(jobject obj, jmethodID methodID,
944 			    jvalue * args) {
945         return functions->CallFloatMethodA(this,obj,methodID,args);
946     }
947 
CallDoubleMethodJNIEnv_948     jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {
949         va_list args;
950 	jdouble result;
951 	va_start(args,methodID);
952 	result = functions->CallDoubleMethodV(this,obj,methodID,args);
953 	va_end(args);
954 	return result;
955     }
CallDoubleMethodVJNIEnv_956     jdouble CallDoubleMethodV(jobject obj, jmethodID methodID,
957 			va_list args) {
958         return functions->CallDoubleMethodV(this,obj,methodID,args);
959     }
CallDoubleMethodAJNIEnv_960     jdouble CallDoubleMethodA(jobject obj, jmethodID methodID,
961 			jvalue * args) {
962         return functions->CallDoubleMethodA(this,obj,methodID,args);
963     }
964 
CallVoidMethodJNIEnv_965     void CallVoidMethod(jobject obj, jmethodID methodID, ...) {
966         va_list args;
967 	va_start(args,methodID);
968 	functions->CallVoidMethodV(this,obj,methodID,args);
969 	va_end(args);
970     }
CallVoidMethodVJNIEnv_971     void CallVoidMethodV(jobject obj, jmethodID methodID,
972 			 va_list args) {
973         functions->CallVoidMethodV(this,obj,methodID,args);
974     }
CallVoidMethodAJNIEnv_975     void CallVoidMethodA(jobject obj, jmethodID methodID,
976 			 jvalue * args) {
977         functions->CallVoidMethodA(this,obj,methodID,args);
978     }
979 
CallNonvirtualObjectMethodJNIEnv_980     jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz,
981 				       jmethodID methodID, ...) {
982         va_list args;
983 	jobject result;
984 	va_start(args,methodID);
985 	result = functions->CallNonvirtualObjectMethodV(this,obj,clazz,
986 							methodID,args);
987 	va_end(args);
988 	return result;
989     }
CallNonvirtualObjectMethodVJNIEnv_990     jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz,
991 					jmethodID methodID, va_list args) {
992         return functions->CallNonvirtualObjectMethodV(this,obj,clazz,
993 						      methodID,args);
994     }
CallNonvirtualObjectMethodAJNIEnv_995     jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz,
996 					jmethodID methodID, jvalue * args) {
997         return functions->CallNonvirtualObjectMethodA(this,obj,clazz,
998 						      methodID,args);
999     }
1000 
CallNonvirtualBooleanMethodJNIEnv_1001     jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz,
1002 					 jmethodID methodID, ...) {
1003         va_list args;
1004 	jboolean result;
1005 	va_start(args,methodID);
1006 	result = functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
1007 							 methodID,args);
1008 	va_end(args);
1009 	return result;
1010     }
CallNonvirtualBooleanMethodVJNIEnv_1011     jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz,
1012 					  jmethodID methodID, va_list args) {
1013         return functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
1014 						       methodID,args);
1015     }
CallNonvirtualBooleanMethodAJNIEnv_1016     jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz,
1017 					  jmethodID methodID, jvalue * args) {
1018         return functions->CallNonvirtualBooleanMethodA(this,obj,clazz,
1019 						       methodID, args);
1020     }
1021 
CallNonvirtualByteMethodJNIEnv_1022     jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz,
1023 				   jmethodID methodID, ...) {
1024         va_list args;
1025 	jbyte result;
1026 	va_start(args,methodID);
1027 	result = functions->CallNonvirtualByteMethodV(this,obj,clazz,
1028 						      methodID,args);
1029 	va_end(args);
1030 	return result;
1031     }
CallNonvirtualByteMethodVJNIEnv_1032     jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz,
1033 				    jmethodID methodID, va_list args) {
1034         return functions->CallNonvirtualByteMethodV(this,obj,clazz,
1035 						    methodID,args);
1036     }
CallNonvirtualByteMethodAJNIEnv_1037     jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz,
1038 				    jmethodID methodID, jvalue * args) {
1039         return functions->CallNonvirtualByteMethodA(this,obj,clazz,
1040 						    methodID,args);
1041     }
1042 
CallNonvirtualCharMethodJNIEnv_1043     jchar CallNonvirtualCharMethod(jobject obj, jclass clazz,
1044 				   jmethodID methodID, ...) {
1045         va_list args;
1046 	jchar result;
1047 	va_start(args,methodID);
1048 	result = functions->CallNonvirtualCharMethodV(this,obj,clazz,
1049 						      methodID,args);
1050 	va_end(args);
1051 	return result;
1052     }
CallNonvirtualCharMethodVJNIEnv_1053     jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz,
1054 				    jmethodID methodID, va_list args) {
1055         return functions->CallNonvirtualCharMethodV(this,obj,clazz,
1056 						    methodID,args);
1057     }
CallNonvirtualCharMethodAJNIEnv_1058     jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz,
1059 				    jmethodID methodID, jvalue * args) {
1060         return functions->CallNonvirtualCharMethodA(this,obj,clazz,
1061 						    methodID,args);
1062     }
1063 
CallNonvirtualShortMethodJNIEnv_1064     jshort CallNonvirtualShortMethod(jobject obj, jclass clazz,
1065 				     jmethodID methodID, ...) {
1066         va_list args;
1067 	jshort result;
1068 	va_start(args,methodID);
1069 	result = functions->CallNonvirtualShortMethodV(this,obj,clazz,
1070 						       methodID,args);
1071 	va_end(args);
1072 	return result;
1073     }
CallNonvirtualShortMethodVJNIEnv_1074     jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz,
1075 				      jmethodID methodID, va_list args) {
1076         return functions->CallNonvirtualShortMethodV(this,obj,clazz,
1077 						     methodID,args);
1078     }
CallNonvirtualShortMethodAJNIEnv_1079     jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,
1080 				      jmethodID methodID, jvalue * args) {
1081         return functions->CallNonvirtualShortMethodA(this,obj,clazz,
1082 						     methodID,args);
1083     }
1084 
CallNonvirtualIntMethodJNIEnv_1085     jint CallNonvirtualIntMethod(jobject obj, jclass clazz,
1086 				 jmethodID methodID, ...) {
1087         va_list args;
1088 	jint result;
1089 	va_start(args,methodID);
1090 	result = functions->CallNonvirtualIntMethodV(this,obj,clazz,
1091 						     methodID,args);
1092 	va_end(args);
1093 	return result;
1094     }
CallNonvirtualIntMethodVJNIEnv_1095     jint CallNonvirtualIntMethodV(jobject obj, jclass clazz,
1096 				  jmethodID methodID, va_list args) {
1097         return functions->CallNonvirtualIntMethodV(this,obj,clazz,
1098 						   methodID,args);
1099     }
CallNonvirtualIntMethodAJNIEnv_1100     jint CallNonvirtualIntMethodA(jobject obj, jclass clazz,
1101 				  jmethodID methodID, jvalue * args) {
1102         return functions->CallNonvirtualIntMethodA(this,obj,clazz,
1103 						   methodID,args);
1104     }
1105 
CallNonvirtualLongMethodJNIEnv_1106     jlong CallNonvirtualLongMethod(jobject obj, jclass clazz,
1107 				   jmethodID methodID, ...) {
1108         va_list args;
1109 	jlong result;
1110 	va_start(args,methodID);
1111 	result = functions->CallNonvirtualLongMethodV(this,obj,clazz,
1112 						      methodID,args);
1113 	va_end(args);
1114 	return result;
1115     }
CallNonvirtualLongMethodVJNIEnv_1116     jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz,
1117 				    jmethodID methodID, va_list args) {
1118         return functions->CallNonvirtualLongMethodV(this,obj,clazz,
1119 						    methodID,args);
1120     }
CallNonvirtualLongMethodAJNIEnv_1121     jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz,
1122 				    jmethodID methodID, jvalue * args) {
1123         return functions->CallNonvirtualLongMethodA(this,obj,clazz,
1124 						    methodID,args);
1125     }
1126 
CallNonvirtualFloatMethodJNIEnv_1127     jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz,
1128 				     jmethodID methodID, ...) {
1129         va_list args;
1130 	jfloat result;
1131 	va_start(args,methodID);
1132 	result = functions->CallNonvirtualFloatMethodV(this,obj,clazz,
1133 						       methodID,args);
1134 	va_end(args);
1135 	return result;
1136     }
CallNonvirtualFloatMethodVJNIEnv_1137     jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz,
1138 				      jmethodID methodID,
1139 				      va_list args) {
1140         return functions->CallNonvirtualFloatMethodV(this,obj,clazz,
1141 						     methodID,args);
1142     }
CallNonvirtualFloatMethodAJNIEnv_1143     jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz,
1144 				      jmethodID methodID,
1145 				      jvalue * args) {
1146         return functions->CallNonvirtualFloatMethodA(this,obj,clazz,
1147 						     methodID,args);
1148     }
1149 
CallNonvirtualDoubleMethodJNIEnv_1150     jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz,
1151 				       jmethodID methodID, ...) {
1152         va_list args;
1153 	jdouble result;
1154 	va_start(args,methodID);
1155 	result = functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
1156 							methodID,args);
1157 	va_end(args);
1158 	return result;
1159     }
CallNonvirtualDoubleMethodVJNIEnv_1160     jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz,
1161 					jmethodID methodID,
1162 					va_list args) {
1163         return functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
1164 						      methodID,args);
1165     }
CallNonvirtualDoubleMethodAJNIEnv_1166     jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz,
1167 					jmethodID methodID,
1168 					jvalue * args) {
1169         return functions->CallNonvirtualDoubleMethodA(this,obj,clazz,
1170 						      methodID,args);
1171     }
1172 
CallNonvirtualVoidMethodJNIEnv_1173     void CallNonvirtualVoidMethod(jobject obj, jclass clazz,
1174 				  jmethodID methodID, ...) {
1175         va_list args;
1176 	va_start(args,methodID);
1177 	functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
1178 	va_end(args);
1179     }
CallNonvirtualVoidMethodVJNIEnv_1180     void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,
1181 				   jmethodID methodID,
1182 				   va_list args) {
1183         functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
1184     }
CallNonvirtualVoidMethodAJNIEnv_1185     void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,
1186 				   jmethodID methodID,
1187 				   jvalue * args) {
1188         functions->CallNonvirtualVoidMethodA(this,obj,clazz,methodID,args);
1189     }
1190 
GetFieldIDJNIEnv_1191     jfieldID GetFieldID(jclass clazz, const char *name,
1192 			const char *sig) {
1193         return functions->GetFieldID(this,clazz,name,sig);
1194     }
1195 
GetObjectFieldJNIEnv_1196     jobject GetObjectField(jobject obj, jfieldID fieldID) {
1197         return functions->GetObjectField(this,obj,fieldID);
1198     }
GetBooleanFieldJNIEnv_1199     jboolean GetBooleanField(jobject obj, jfieldID fieldID) {
1200         return functions->GetBooleanField(this,obj,fieldID);
1201     }
GetByteFieldJNIEnv_1202     jbyte GetByteField(jobject obj, jfieldID fieldID) {
1203         return functions->GetByteField(this,obj,fieldID);
1204     }
GetCharFieldJNIEnv_1205     jchar GetCharField(jobject obj, jfieldID fieldID) {
1206         return functions->GetCharField(this,obj,fieldID);
1207     }
GetShortFieldJNIEnv_1208     jshort GetShortField(jobject obj, jfieldID fieldID) {
1209         return functions->GetShortField(this,obj,fieldID);
1210     }
GetIntFieldJNIEnv_1211     jint GetIntField(jobject obj, jfieldID fieldID) {
1212         return functions->GetIntField(this,obj,fieldID);
1213     }
GetLongFieldJNIEnv_1214     jlong GetLongField(jobject obj, jfieldID fieldID) {
1215         return functions->GetLongField(this,obj,fieldID);
1216     }
GetFloatFieldJNIEnv_1217     jfloat GetFloatField(jobject obj, jfieldID fieldID) {
1218         return functions->GetFloatField(this,obj,fieldID);
1219     }
GetDoubleFieldJNIEnv_1220     jdouble GetDoubleField(jobject obj, jfieldID fieldID) {
1221         return functions->GetDoubleField(this,obj,fieldID);
1222     }
1223 
SetObjectFieldJNIEnv_1224     void SetObjectField(jobject obj, jfieldID fieldID, jobject val) {
1225         functions->SetObjectField(this,obj,fieldID,val);
1226     }
SetBooleanFieldJNIEnv_1227     void SetBooleanField(jobject obj, jfieldID fieldID,
1228 			 jboolean val) {
1229         functions->SetBooleanField(this,obj,fieldID,val);
1230     }
SetByteFieldJNIEnv_1231     void SetByteField(jobject obj, jfieldID fieldID,
1232 		      jbyte val) {
1233         functions->SetByteField(this,obj,fieldID,val);
1234     }
SetCharFieldJNIEnv_1235     void SetCharField(jobject obj, jfieldID fieldID,
1236 		      jchar val) {
1237         functions->SetCharField(this,obj,fieldID,val);
1238     }
SetShortFieldJNIEnv_1239     void SetShortField(jobject obj, jfieldID fieldID,
1240 		       jshort val) {
1241         functions->SetShortField(this,obj,fieldID,val);
1242     }
SetIntFieldJNIEnv_1243     void SetIntField(jobject obj, jfieldID fieldID,
1244 		     jint val) {
1245         functions->SetIntField(this,obj,fieldID,val);
1246     }
SetLongFieldJNIEnv_1247     void SetLongField(jobject obj, jfieldID fieldID,
1248 		      jlong val) {
1249         functions->SetLongField(this,obj,fieldID,val);
1250     }
SetFloatFieldJNIEnv_1251     void SetFloatField(jobject obj, jfieldID fieldID,
1252 		       jfloat val) {
1253         functions->SetFloatField(this,obj,fieldID,val);
1254     }
SetDoubleFieldJNIEnv_1255     void SetDoubleField(jobject obj, jfieldID fieldID,
1256 			jdouble val) {
1257         functions->SetDoubleField(this,obj,fieldID,val);
1258     }
1259 
GetStaticMethodIDJNIEnv_1260     jmethodID GetStaticMethodID(jclass clazz, const char *name,
1261 				const char *sig) {
1262         return functions->GetStaticMethodID(this,clazz,name,sig);
1263     }
1264 
CallStaticObjectMethodJNIEnv_1265     jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID,
1266 			     ...) {
1267         va_list args;
1268 	jobject result;
1269 	va_start(args,methodID);
1270 	result = functions->CallStaticObjectMethodV(this,clazz,methodID,args);
1271 	va_end(args);
1272 	return result;
1273     }
CallStaticObjectMethodVJNIEnv_1274     jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID,
1275 			      va_list args) {
1276         return functions->CallStaticObjectMethodV(this,clazz,methodID,args);
1277     }
CallStaticObjectMethodAJNIEnv_1278     jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID,
1279 			      jvalue *args) {
1280         return functions->CallStaticObjectMethodA(this,clazz,methodID,args);
1281     }
1282 
CallStaticBooleanMethodJNIEnv_1283     jboolean CallStaticBooleanMethod(jclass clazz,
1284 				     jmethodID methodID, ...) {
1285         va_list args;
1286 	jboolean result;
1287 	va_start(args,methodID);
1288 	result = functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
1289 	va_end(args);
1290 	return result;
1291     }
CallStaticBooleanMethodVJNIEnv_1292     jboolean CallStaticBooleanMethodV(jclass clazz,
1293 				      jmethodID methodID, va_list args) {
1294         return functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
1295     }
CallStaticBooleanMethodAJNIEnv_1296     jboolean CallStaticBooleanMethodA(jclass clazz,
1297 				      jmethodID methodID, jvalue *args) {
1298         return functions->CallStaticBooleanMethodA(this,clazz,methodID,args);
1299     }
1300 
CallStaticByteMethodJNIEnv_1301     jbyte CallStaticByteMethod(jclass clazz,
1302 			       jmethodID methodID, ...) {
1303         va_list args;
1304 	jbyte result;
1305 	va_start(args,methodID);
1306 	result = functions->CallStaticByteMethodV(this,clazz,methodID,args);
1307 	va_end(args);
1308 	return result;
1309     }
CallStaticByteMethodVJNIEnv_1310     jbyte CallStaticByteMethodV(jclass clazz,
1311 				jmethodID methodID, va_list args) {
1312         return functions->CallStaticByteMethodV(this,clazz,methodID,args);
1313     }
CallStaticByteMethodAJNIEnv_1314     jbyte CallStaticByteMethodA(jclass clazz,
1315 				jmethodID methodID, jvalue *args) {
1316         return functions->CallStaticByteMethodA(this,clazz,methodID,args);
1317     }
1318 
CallStaticCharMethodJNIEnv_1319     jchar CallStaticCharMethod(jclass clazz,
1320 			       jmethodID methodID, ...) {
1321         va_list args;
1322 	jchar result;
1323 	va_start(args,methodID);
1324 	result = functions->CallStaticCharMethodV(this,clazz,methodID,args);
1325 	va_end(args);
1326 	return result;
1327     }
CallStaticCharMethodVJNIEnv_1328     jchar CallStaticCharMethodV(jclass clazz,
1329 				jmethodID methodID, va_list args) {
1330         return functions->CallStaticCharMethodV(this,clazz,methodID,args);
1331     }
CallStaticCharMethodAJNIEnv_1332     jchar CallStaticCharMethodA(jclass clazz,
1333 				jmethodID methodID, jvalue *args) {
1334         return functions->CallStaticCharMethodA(this,clazz,methodID,args);
1335     }
1336 
CallStaticShortMethodJNIEnv_1337     jshort CallStaticShortMethod(jclass clazz,
1338 				 jmethodID methodID, ...) {
1339         va_list args;
1340 	jshort result;
1341 	va_start(args,methodID);
1342 	result = functions->CallStaticShortMethodV(this,clazz,methodID,args);
1343 	va_end(args);
1344 	return result;
1345     }
CallStaticShortMethodVJNIEnv_1346     jshort CallStaticShortMethodV(jclass clazz,
1347 				  jmethodID methodID, va_list args) {
1348         return functions->CallStaticShortMethodV(this,clazz,methodID,args);
1349     }
CallStaticShortMethodAJNIEnv_1350     jshort CallStaticShortMethodA(jclass clazz,
1351 				  jmethodID methodID, jvalue *args) {
1352         return functions->CallStaticShortMethodA(this,clazz,methodID,args);
1353     }
1354 
CallStaticIntMethodJNIEnv_1355     jint CallStaticIntMethod(jclass clazz,
1356 			     jmethodID methodID, ...) {
1357         va_list args;
1358 	jint result;
1359 	va_start(args,methodID);
1360 	result = functions->CallStaticIntMethodV(this,clazz,methodID,args);
1361 	va_end(args);
1362 	return result;
1363     }
CallStaticIntMethodVJNIEnv_1364     jint CallStaticIntMethodV(jclass clazz,
1365 			      jmethodID methodID, va_list args) {
1366         return functions->CallStaticIntMethodV(this,clazz,methodID,args);
1367     }
CallStaticIntMethodAJNIEnv_1368     jint CallStaticIntMethodA(jclass clazz,
1369 			      jmethodID methodID, jvalue *args) {
1370         return functions->CallStaticIntMethodA(this,clazz,methodID,args);
1371     }
1372 
CallStaticLongMethodJNIEnv_1373     jlong CallStaticLongMethod(jclass clazz,
1374 			       jmethodID methodID, ...) {
1375         va_list args;
1376 	jlong result;
1377 	va_start(args,methodID);
1378 	result = functions->CallStaticLongMethodV(this,clazz,methodID,args);
1379 	va_end(args);
1380 	return result;
1381     }
CallStaticLongMethodVJNIEnv_1382     jlong CallStaticLongMethodV(jclass clazz,
1383 				jmethodID methodID, va_list args) {
1384         return functions->CallStaticLongMethodV(this,clazz,methodID,args);
1385     }
CallStaticLongMethodAJNIEnv_1386     jlong CallStaticLongMethodA(jclass clazz,
1387 				jmethodID methodID, jvalue *args) {
1388         return functions->CallStaticLongMethodA(this,clazz,methodID,args);
1389     }
1390 
CallStaticFloatMethodJNIEnv_1391     jfloat CallStaticFloatMethod(jclass clazz,
1392 				 jmethodID methodID, ...) {
1393         va_list args;
1394 	jfloat result;
1395 	va_start(args,methodID);
1396 	result = functions->CallStaticFloatMethodV(this,clazz,methodID,args);
1397 	va_end(args);
1398 	return result;
1399     }
CallStaticFloatMethodVJNIEnv_1400     jfloat CallStaticFloatMethodV(jclass clazz,
1401 				  jmethodID methodID, va_list args) {
1402         return functions->CallStaticFloatMethodV(this,clazz,methodID,args);
1403     }
CallStaticFloatMethodAJNIEnv_1404     jfloat CallStaticFloatMethodA(jclass clazz,
1405 				  jmethodID methodID, jvalue *args) {
1406         return functions->CallStaticFloatMethodA(this,clazz,methodID,args);
1407     }
1408 
CallStaticDoubleMethodJNIEnv_1409     jdouble CallStaticDoubleMethod(jclass clazz,
1410 				   jmethodID methodID, ...) {
1411         va_list args;
1412 	jdouble result;
1413 	va_start(args,methodID);
1414 	result = functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
1415 	va_end(args);
1416 	return result;
1417     }
CallStaticDoubleMethodVJNIEnv_1418     jdouble CallStaticDoubleMethodV(jclass clazz,
1419 				    jmethodID methodID, va_list args) {
1420         return functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
1421     }
CallStaticDoubleMethodAJNIEnv_1422     jdouble CallStaticDoubleMethodA(jclass clazz,
1423 				    jmethodID methodID, jvalue *args) {
1424         return functions->CallStaticDoubleMethodA(this,clazz,methodID,args);
1425     }
1426 
CallStaticVoidMethodJNIEnv_1427     void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {
1428         va_list args;
1429 	va_start(args,methodID);
1430 	functions->CallStaticVoidMethodV(this,cls,methodID,args);
1431 	va_end(args);
1432     }
CallStaticVoidMethodVJNIEnv_1433     void CallStaticVoidMethodV(jclass cls, jmethodID methodID,
1434 			       va_list args) {
1435         functions->CallStaticVoidMethodV(this,cls,methodID,args);
1436     }
CallStaticVoidMethodAJNIEnv_1437     void CallStaticVoidMethodA(jclass cls, jmethodID methodID,
1438 			       jvalue * args) {
1439         functions->CallStaticVoidMethodA(this,cls,methodID,args);
1440     }
1441 
GetStaticFieldIDJNIEnv_1442     jfieldID GetStaticFieldID(jclass clazz, const char *name,
1443 			      const char *sig) {
1444         return functions->GetStaticFieldID(this,clazz,name,sig);
1445     }
GetStaticObjectFieldJNIEnv_1446     jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) {
1447         return functions->GetStaticObjectField(this,clazz,fieldID);
1448     }
GetStaticBooleanFieldJNIEnv_1449     jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) {
1450         return functions->GetStaticBooleanField(this,clazz,fieldID);
1451     }
GetStaticByteFieldJNIEnv_1452     jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) {
1453         return functions->GetStaticByteField(this,clazz,fieldID);
1454     }
GetStaticCharFieldJNIEnv_1455     jchar GetStaticCharField(jclass clazz, jfieldID fieldID) {
1456         return functions->GetStaticCharField(this,clazz,fieldID);
1457     }
GetStaticShortFieldJNIEnv_1458     jshort GetStaticShortField(jclass clazz, jfieldID fieldID) {
1459         return functions->GetStaticShortField(this,clazz,fieldID);
1460     }
GetStaticIntFieldJNIEnv_1461     jint GetStaticIntField(jclass clazz, jfieldID fieldID) {
1462         return functions->GetStaticIntField(this,clazz,fieldID);
1463     }
GetStaticLongFieldJNIEnv_1464     jlong GetStaticLongField(jclass clazz, jfieldID fieldID) {
1465         return functions->GetStaticLongField(this,clazz,fieldID);
1466     }
GetStaticFloatFieldJNIEnv_1467     jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) {
1468         return functions->GetStaticFloatField(this,clazz,fieldID);
1469     }
GetStaticDoubleFieldJNIEnv_1470     jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) {
1471         return functions->GetStaticDoubleField(this,clazz,fieldID);
1472     }
1473 
SetStaticObjectFieldJNIEnv_1474     void SetStaticObjectField(jclass clazz, jfieldID fieldID,
1475 			jobject value) {
1476       functions->SetStaticObjectField(this,clazz,fieldID,value);
1477     }
SetStaticBooleanFieldJNIEnv_1478     void SetStaticBooleanField(jclass clazz, jfieldID fieldID,
1479 			jboolean value) {
1480       functions->SetStaticBooleanField(this,clazz,fieldID,value);
1481     }
SetStaticByteFieldJNIEnv_1482     void SetStaticByteField(jclass clazz, jfieldID fieldID,
1483 			jbyte value) {
1484       functions->SetStaticByteField(this,clazz,fieldID,value);
1485     }
SetStaticCharFieldJNIEnv_1486     void SetStaticCharField(jclass clazz, jfieldID fieldID,
1487 			jchar value) {
1488       functions->SetStaticCharField(this,clazz,fieldID,value);
1489     }
SetStaticShortFieldJNIEnv_1490     void SetStaticShortField(jclass clazz, jfieldID fieldID,
1491 			jshort value) {
1492       functions->SetStaticShortField(this,clazz,fieldID,value);
1493     }
SetStaticIntFieldJNIEnv_1494     void SetStaticIntField(jclass clazz, jfieldID fieldID,
1495 			jint value) {
1496       functions->SetStaticIntField(this,clazz,fieldID,value);
1497     }
SetStaticLongFieldJNIEnv_1498     void SetStaticLongField(jclass clazz, jfieldID fieldID,
1499 			jlong value) {
1500       functions->SetStaticLongField(this,clazz,fieldID,value);
1501     }
SetStaticFloatFieldJNIEnv_1502     void SetStaticFloatField(jclass clazz, jfieldID fieldID,
1503 			jfloat value) {
1504       functions->SetStaticFloatField(this,clazz,fieldID,value);
1505     }
SetStaticDoubleFieldJNIEnv_1506     void SetStaticDoubleField(jclass clazz, jfieldID fieldID,
1507 			jdouble value) {
1508       functions->SetStaticDoubleField(this,clazz,fieldID,value);
1509     }
1510 
NewStringJNIEnv_1511     jstring NewString(const jchar *unicode, jsize len) {
1512         return functions->NewString(this,unicode,len);
1513     }
GetStringLengthJNIEnv_1514     jsize GetStringLength(jstring str) {
1515         return functions->GetStringLength(this,str);
1516     }
GetStringCharsJNIEnv_1517     const jchar *GetStringChars(jstring str, jboolean *isCopy) {
1518         return functions->GetStringChars(this,str,isCopy);
1519     }
ReleaseStringCharsJNIEnv_1520     void ReleaseStringChars(jstring str, const jchar *chars) {
1521         functions->ReleaseStringChars(this,str,chars);
1522     }
1523 
NewStringUTFJNIEnv_1524     jstring NewStringUTF(const char *utf) {
1525         return functions->NewStringUTF(this,utf);
1526     }
GetStringUTFLengthJNIEnv_1527     jsize GetStringUTFLength(jstring str) {
1528         return functions->GetStringUTFLength(this,str);
1529     }
GetStringUTFCharsJNIEnv_1530     const char* GetStringUTFChars(jstring str, jboolean *isCopy) {
1531         return functions->GetStringUTFChars(this,str,isCopy);
1532     }
ReleaseStringUTFCharsJNIEnv_1533     void ReleaseStringUTFChars(jstring str, const char* chars) {
1534         functions->ReleaseStringUTFChars(this,str,chars);
1535     }
1536 
GetArrayLengthJNIEnv_1537     jsize GetArrayLength(jarray array) {
1538         return functions->GetArrayLength(this,array);
1539     }
1540 
NewObjectArrayJNIEnv_1541     jobjectArray NewObjectArray(jsize len, jclass clazz,
1542 				jobject init) {
1543         return functions->NewObjectArray(this,len,clazz,init);
1544     }
GetObjectArrayElementJNIEnv_1545     jobject GetObjectArrayElement(jobjectArray array, jsize index) {
1546         return functions->GetObjectArrayElement(this,array,index);
1547     }
SetObjectArrayElementJNIEnv_1548     void SetObjectArrayElement(jobjectArray array, jsize index,
1549 			       jobject val) {
1550         functions->SetObjectArrayElement(this,array,index,val);
1551     }
1552 
NewBooleanArrayJNIEnv_1553     jbooleanArray NewBooleanArray(jsize len) {
1554         return functions->NewBooleanArray(this,len);
1555     }
NewByteArrayJNIEnv_1556     jbyteArray NewByteArray(jsize len) {
1557         return functions->NewByteArray(this,len);
1558     }
NewCharArrayJNIEnv_1559     jcharArray NewCharArray(jsize len) {
1560         return functions->NewCharArray(this,len);
1561     }
NewShortArrayJNIEnv_1562     jshortArray NewShortArray(jsize len) {
1563         return functions->NewShortArray(this,len);
1564     }
NewIntArrayJNIEnv_1565     jintArray NewIntArray(jsize len) {
1566         return functions->NewIntArray(this,len);
1567     }
NewLongArrayJNIEnv_1568     jlongArray NewLongArray(jsize len) {
1569         return functions->NewLongArray(this,len);
1570     }
NewFloatArrayJNIEnv_1571     jfloatArray NewFloatArray(jsize len) {
1572         return functions->NewFloatArray(this,len);
1573     }
NewDoubleArrayJNIEnv_1574     jdoubleArray NewDoubleArray(jsize len) {
1575         return functions->NewDoubleArray(this,len);
1576     }
1577 
GetBooleanArrayElementsJNIEnv_1578     jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) {
1579         return functions->GetBooleanArrayElements(this,array,isCopy);
1580     }
GetByteArrayElementsJNIEnv_1581     jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) {
1582         return functions->GetByteArrayElements(this,array,isCopy);
1583     }
GetCharArrayElementsJNIEnv_1584     jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) {
1585         return functions->GetCharArrayElements(this,array,isCopy);
1586     }
GetShortArrayElementsJNIEnv_1587     jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) {
1588         return functions->GetShortArrayElements(this,array,isCopy);
1589     }
GetIntArrayElementsJNIEnv_1590     jint * GetIntArrayElements(jintArray array, jboolean *isCopy) {
1591         return functions->GetIntArrayElements(this,array,isCopy);
1592     }
GetLongArrayElementsJNIEnv_1593     jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) {
1594         return functions->GetLongArrayElements(this,array,isCopy);
1595     }
GetFloatArrayElementsJNIEnv_1596     jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) {
1597         return functions->GetFloatArrayElements(this,array,isCopy);
1598     }
GetDoubleArrayElementsJNIEnv_1599     jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) {
1600         return functions->GetDoubleArrayElements(this,array,isCopy);
1601     }
1602 
ReleaseBooleanArrayElementsJNIEnv_1603     void ReleaseBooleanArrayElements(jbooleanArray array,
1604 				     jboolean *elems,
1605 				     jint mode) {
1606         functions->ReleaseBooleanArrayElements(this,array,elems,mode);
1607     }
ReleaseByteArrayElementsJNIEnv_1608     void ReleaseByteArrayElements(jbyteArray array,
1609 				  jbyte *elems,
1610 				  jint mode) {
1611         functions->ReleaseByteArrayElements(this,array,elems,mode);
1612     }
ReleaseCharArrayElementsJNIEnv_1613     void ReleaseCharArrayElements(jcharArray array,
1614 				  jchar *elems,
1615 				  jint mode) {
1616         functions->ReleaseCharArrayElements(this,array,elems,mode);
1617     }
ReleaseShortArrayElementsJNIEnv_1618     void ReleaseShortArrayElements(jshortArray array,
1619 				   jshort *elems,
1620 				   jint mode) {
1621         functions->ReleaseShortArrayElements(this,array,elems,mode);
1622     }
ReleaseIntArrayElementsJNIEnv_1623     void ReleaseIntArrayElements(jintArray array,
1624 				 jint *elems,
1625 				 jint mode) {
1626         functions->ReleaseIntArrayElements(this,array,elems,mode);
1627     }
ReleaseLongArrayElementsJNIEnv_1628     void ReleaseLongArrayElements(jlongArray array,
1629 				  jlong *elems,
1630 				  jint mode) {
1631         functions->ReleaseLongArrayElements(this,array,elems,mode);
1632     }
ReleaseFloatArrayElementsJNIEnv_1633     void ReleaseFloatArrayElements(jfloatArray array,
1634 				   jfloat *elems,
1635 				   jint mode) {
1636         functions->ReleaseFloatArrayElements(this,array,elems,mode);
1637     }
ReleaseDoubleArrayElementsJNIEnv_1638     void ReleaseDoubleArrayElements(jdoubleArray array,
1639 				    jdouble *elems,
1640 				    jint mode) {
1641         functions->ReleaseDoubleArrayElements(this,array,elems,mode);
1642     }
1643 
GetBooleanArrayRegionJNIEnv_1644     void GetBooleanArrayRegion(jbooleanArray array,
1645 			       jsize start, jsize len, jboolean *buf) {
1646         functions->GetBooleanArrayRegion(this,array,start,len,buf);
1647     }
GetByteArrayRegionJNIEnv_1648     void GetByteArrayRegion(jbyteArray array,
1649 			    jsize start, jsize len, jbyte *buf) {
1650         functions->GetByteArrayRegion(this,array,start,len,buf);
1651     }
GetCharArrayRegionJNIEnv_1652     void GetCharArrayRegion(jcharArray array,
1653 			    jsize start, jsize len, jchar *buf) {
1654         functions->GetCharArrayRegion(this,array,start,len,buf);
1655     }
GetShortArrayRegionJNIEnv_1656     void GetShortArrayRegion(jshortArray array,
1657 			     jsize start, jsize len, jshort *buf) {
1658         functions->GetShortArrayRegion(this,array,start,len,buf);
1659     }
GetIntArrayRegionJNIEnv_1660     void GetIntArrayRegion(jintArray array,
1661 			   jsize start, jsize len, jint *buf) {
1662         functions->GetIntArrayRegion(this,array,start,len,buf);
1663     }
GetLongArrayRegionJNIEnv_1664     void GetLongArrayRegion(jlongArray array,
1665 			    jsize start, jsize len, jlong *buf) {
1666         functions->GetLongArrayRegion(this,array,start,len,buf);
1667     }
GetFloatArrayRegionJNIEnv_1668     void GetFloatArrayRegion(jfloatArray array,
1669 			     jsize start, jsize len, jfloat *buf) {
1670         functions->GetFloatArrayRegion(this,array,start,len,buf);
1671     }
GetDoubleArrayRegionJNIEnv_1672     void GetDoubleArrayRegion(jdoubleArray array,
1673 			      jsize start, jsize len, jdouble *buf) {
1674         functions->GetDoubleArrayRegion(this,array,start,len,buf);
1675     }
1676 
SetBooleanArrayRegionJNIEnv_1677     void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,
1678 			       jboolean *buf) {
1679         functions->SetBooleanArrayRegion(this,array,start,len,buf);
1680     }
SetByteArrayRegionJNIEnv_1681     void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,
1682 			    jbyte *buf) {
1683         functions->SetByteArrayRegion(this,array,start,len,buf);
1684     }
SetCharArrayRegionJNIEnv_1685     void SetCharArrayRegion(jcharArray array, jsize start, jsize len,
1686 			    jchar *buf) {
1687         functions->SetCharArrayRegion(this,array,start,len,buf);
1688     }
SetShortArrayRegionJNIEnv_1689     void SetShortArrayRegion(jshortArray array, jsize start, jsize len,
1690 			     jshort *buf) {
1691         functions->SetShortArrayRegion(this,array,start,len,buf);
1692     }
SetIntArrayRegionJNIEnv_1693     void SetIntArrayRegion(jintArray array, jsize start, jsize len,
1694 			   jint *buf) {
1695         functions->SetIntArrayRegion(this,array,start,len,buf);
1696     }
SetLongArrayRegionJNIEnv_1697     void SetLongArrayRegion(jlongArray array, jsize start, jsize len,
1698 			    jlong *buf) {
1699         functions->SetLongArrayRegion(this,array,start,len,buf);
1700     }
SetFloatArrayRegionJNIEnv_1701     void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,
1702 			     jfloat *buf) {
1703         functions->SetFloatArrayRegion(this,array,start,len,buf);
1704     }
SetDoubleArrayRegionJNIEnv_1705     void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
1706 			      jdouble *buf) {
1707         functions->SetDoubleArrayRegion(this,array,start,len,buf);
1708     }
1709 
RegisterNativesJNIEnv_1710     jint RegisterNatives(jclass clazz, const JNINativeMethod *methods,
1711 			 jint nMethods) {
1712         return functions->RegisterNatives(this,clazz,methods,nMethods);
1713     }
UnregisterNativesJNIEnv_1714     jint UnregisterNatives(jclass clazz) {
1715         return functions->UnregisterNatives(this,clazz);
1716     }
1717 
MonitorEnterJNIEnv_1718     jint MonitorEnter(jobject obj) {
1719         return functions->MonitorEnter(this,obj);
1720     }
MonitorExitJNIEnv_1721     jint MonitorExit(jobject obj) {
1722         return functions->MonitorExit(this,obj);
1723     }
1724 
GetJavaVMJNIEnv_1725     jint GetJavaVM(JavaVM **vm) {
1726         return functions->GetJavaVM(this,vm);
1727     }
1728 
1729 #endif /* __cplusplus */
1730 };
1731 
1732 /* These structures will be VM-specific. */
1733 
1734 typedef struct JDK1_1InitArgs {
1735     jint version;
1736 
1737     char **properties;
1738     jint checkSource;
1739     jint nativeStackSize;
1740     jint javaStackSize;
1741     jint minHeapSize;
1742     jint maxHeapSize;
1743     jint verifyMode;
1744     char *classpath;
1745 
1746     jint (JNICALL *vfprintf)(FILE *fp, const char *format, va_list args);
1747     void (JNICALL *exit)(jint code);
1748     void (JNICALL *abort)();
1749 
1750     jint enableClassGC;
1751     jint enableVerboseGC;
1752     jint disableAsyncGC;
1753     jint verbose;
1754     jboolean debugging;
1755     jint debugPort;
1756 } JDK1_1InitArgs;
1757 
1758 typedef struct JDK1_1AttachArgs {
1759     void * __padding; /* C compilers don't allow empty structures. */
1760 } JDK1_1AttachArgs;
1761 
1762 /* End VM-specific. */
1763 
1764 struct JNIInvokeInterface_ {
1765     void *reserved0;
1766     void *reserved1;
1767     void *reserved2;
1768 
1769     jint (JNICALL *DestroyJavaVM)(JavaVM *vm);
1770 
1771     jint (JNICALL *AttachCurrentThread)
1772       (JavaVM *vm, JNIEnv **penv, void *args);
1773 
1774     jint (JNICALL *DetachCurrentThread)(JavaVM *vm);
1775 };
1776 
1777 struct JavaVM_ {
1778     const struct JNIInvokeInterface_ *functions;
1779     void *reserved0;
1780     void *reserved1;
1781     void *reserved2;
1782 #ifdef __cplusplus
1783 
DestroyJavaVMJavaVM_1784     jint DestroyJavaVM() {
1785         return functions->DestroyJavaVM(this);
1786     }
AttachCurrentThreadJavaVM_1787     jint AttachCurrentThread(JNIEnv **penv, void *args) {
1788         return functions->AttachCurrentThread(this, penv, args);
1789     }
DetachCurrentThreadJavaVM_1790     jint DetachCurrentThread() {
1791         return functions->DetachCurrentThread(this);
1792     }
1793 
1794 #endif
1795 };
1796 
1797 JNI_PUBLIC_API(void) JNI_GetDefaultJavaVMInitArgs(void *);
1798 
1799 JNI_PUBLIC_API(jint) JNI_CreateJavaVM(JavaVM **, JNIEnv **, void *);
1800 
1801 JNI_PUBLIC_API(jint) JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);
1802 JNI_PUBLIC_API(jref) JNI_MakeLocalRef(JNIEnv *pJNIEnv, void *pHObject);
1803 
1804 #ifdef __cplusplus
1805 } /* extern "C" */
1806 #endif /* __cplusplus */
1807 
1808 #endif /* JNI_H */
1809 
1810 
1811