File indexing completed on 2024-04-28 16:07:43

0001 /* ***** BEGIN LICENSE BLOCK *****
0002  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
0003  *
0004  * The contents of this file are subject to the Mozilla Public License Version
0005  * 1.1 (the "License"); you may not use this file except in compliance with
0006  * the License. You may obtain a copy of the License at
0007  * http://www.mozilla.org/MPL/
0008  *
0009  * Software distributed under the License is distributed on an "AS IS" basis,
0010  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
0011  * for the specific language governing rights and limitations under the
0012  * License.
0013  *
0014  * The Original Code is the Java Runtime Interface.
0015  *
0016  * The Initial Developer of the Original Code is
0017  * Netscape Communications Corporation and Sun Microsystems, Inc.
0018  * Portions created by the Initial Developer are Copyright (C) 1993-1996
0019  * the Initial Developer. All Rights Reserved.
0020  *
0021  * Contributor(s):
0022  *
0023  * Alternatively, the contents of this file may be used under the terms of
0024  * either the GNU General Public License Version 2 or later (the "GPL"), or
0025  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
0026  * in which case the provisions of the GPL or the LGPL are applicable instead
0027  * of those above. If you wish to allow use of your version of this file only
0028  * under the terms of either the GPL or the LGPL, and not to allow others to
0029  * use your version of this file under the terms of the MPL, indicate your
0030  * decision by deleting the provisions above and replace them with the notice
0031  * and other provisions required by the GPL or the LGPL. If you do not delete
0032  * the provisions above, a recipient may use your version of this file under
0033  * the terms of any one of the MPL, the GPL or the LGPL.
0034  *
0035  * ***** END LICENSE BLOCK ***** */
0036 
0037 #ifndef JNI_H
0038 #define JNI_H
0039 
0040 #include <stdio.h>
0041 #include <stdarg.h>
0042 
0043 /* jni_md.h contains the machine-dependent typedefs for jbyte, jint 
0044    and jlong */ 
0045 
0046 #include "jni_md.h"
0047 
0048 #ifdef __cplusplus
0049 extern "C" {
0050 #endif
0051 
0052 /*
0053  * JNI Types
0054  */
0055 
0056 typedef unsigned char   jboolean;
0057 typedef unsigned short  jchar;
0058 typedef short       jshort;
0059 typedef float       jfloat;
0060 typedef double      jdouble;
0061 
0062 typedef jint            jsize;
0063 
0064 #ifdef __cplusplus
0065 
0066 class _jobject {};
0067 class _jclass : public _jobject {};
0068 class _jthrowable : public _jobject {};
0069 class _jstring : public _jobject {};
0070 class _jarray : public _jobject {};
0071 class _jbooleanArray : public _jarray {};
0072 class _jbyteArray : public _jarray {};
0073 class _jcharArray : public _jarray {};
0074 class _jshortArray : public _jarray {};
0075 class _jintArray : public _jarray {};
0076 class _jlongArray : public _jarray {};
0077 class _jfloatArray : public _jarray {};
0078 class _jdoubleArray : public _jarray {};
0079 class _jobjectArray : public _jarray {};
0080 
0081 typedef _jobject *jobject;
0082 typedef _jclass *jclass;
0083 typedef _jthrowable *jthrowable;
0084 typedef _jstring *jstring;
0085 typedef _jarray *jarray;
0086 typedef _jbooleanArray *jbooleanArray;
0087 typedef _jbyteArray *jbyteArray;
0088 typedef _jcharArray *jcharArray;
0089 typedef _jshortArray *jshortArray;
0090 typedef _jintArray *jintArray;
0091 typedef _jlongArray *jlongArray;
0092 typedef _jfloatArray *jfloatArray;
0093 typedef _jdoubleArray *jdoubleArray;
0094 typedef _jobjectArray *jobjectArray;
0095 
0096 #else
0097 
0098 struct _jobject;
0099 
0100 typedef struct _jobject *jobject;
0101 typedef jobject jclass;
0102 typedef jobject jthrowable;
0103 typedef jobject jstring;
0104 typedef jobject jarray;
0105 typedef jarray jbooleanArray;
0106 typedef jarray jbyteArray;
0107 typedef jarray jcharArray;
0108 typedef jarray jshortArray;
0109 typedef jarray jintArray;
0110 typedef jarray jlongArray;
0111 typedef jarray jfloatArray;
0112 typedef jarray jdoubleArray;
0113 typedef jarray jobjectArray;
0114 
0115 #endif
0116 
0117 typedef jobject jweak;
0118 
0119 #if 0   /* moved to jri_md.h */
0120 typedef jobject jref; /* For transition---not meant to be part of public 
0121              API anymore.*/
0122 #endif
0123 
0124 typedef union jvalue {
0125     jboolean z;
0126     jbyte    b;
0127     jchar    c;
0128     jshort   s;
0129     jint     i;
0130     jlong    j;
0131     jfloat   f;
0132     jdouble  d;
0133     jobject  l;
0134 } jvalue;
0135 
0136 struct _jfieldID;
0137 typedef struct _jfieldID *jfieldID;
0138 
0139 struct _jmethodID;
0140 typedef struct _jmethodID *jmethodID;
0141 
0142 /*
0143  * jboolean constants
0144  */
0145 
0146 #define JNI_FALSE 0
0147 #define JNI_TRUE 1
0148 
0149 /*
0150  * possible return values for JNI functions.
0151  */
0152 
0153 #define JNI_OK           0                 /* success */
0154 #define JNI_ERR          (-1)              /* unknown error */
0155 #define JNI_EDETACHED    (-2)              /* thread detached from the VM */
0156 #define JNI_EVERSION     (-3)              /* JNI version error */
0157 #define JNI_ENOMEM       (-4)              /* not enough memory */
0158 #define JNI_EEXIST       (-5)              /* VM already created */
0159 #define JNI_EINVAL       (-6)              /* invalid arguments */
0160 
0161 /*
0162  * used in ReleaseScalarArrayElements
0163  */
0164   
0165 #define JNI_COMMIT 1
0166 #define JNI_ABORT 2
0167 
0168 /*
0169  * used in RegisterNatives to describe native method name, signature,
0170  * and function pointer.
0171  */
0172 
0173 typedef struct {
0174     char *name;
0175     char *signature;
0176     void *fnPtr;
0177 } JNINativeMethod;
0178 
0179 /*
0180  * JNI Native Method Interface.
0181  */
0182 
0183 struct JNINativeInterface_;
0184 
0185 struct JNIEnv_;
0186 
0187 #ifdef __cplusplus
0188 typedef JNIEnv_ JNIEnv;
0189 #else
0190 typedef const struct JNINativeInterface_ *JNIEnv;
0191 #endif
0192 
0193 /*
0194  * JNI Invocation Interface.
0195  */
0196 
0197 struct JNIInvokeInterface_;
0198 
0199 struct JavaVM_;
0200 
0201 #ifdef __cplusplus
0202 typedef JavaVM_ JavaVM;
0203 #else
0204 typedef const struct JNIInvokeInterface_ *JavaVM;
0205 #endif
0206 
0207 struct JNINativeInterface_ {
0208     void *reserved0;
0209     void *reserved1;
0210     void *reserved2;
0211 
0212     void *reserved3;
0213     jint (JNICALL *GetVersion)(JNIEnv *env);
0214 
0215     jclass (JNICALL *DefineClass)
0216       (JNIEnv *env, const char *name, jobject loader, const jbyte *buf, 
0217        jsize len);
0218     jclass (JNICALL *FindClass)
0219       (JNIEnv *env, const char *name);
0220 
0221     jmethodID (JNICALL *FromReflectedMethod)
0222       (JNIEnv *env, jobject method);
0223     jfieldID (JNICALL *FromReflectedField)
0224       (JNIEnv *env, jobject field);
0225 
0226     jobject (JNICALL *ToReflectedMethod)
0227       (JNIEnv *env, jclass cls, jmethodID methodID, jboolean isStatic);
0228 
0229     jclass (JNICALL *GetSuperclass)
0230       (JNIEnv *env, jclass sub);
0231     jboolean (JNICALL *IsAssignableFrom)
0232       (JNIEnv *env, jclass sub, jclass sup);
0233 
0234     jobject (JNICALL *ToReflectedField)
0235       (JNIEnv *env, jclass cls, jfieldID fieldID, jboolean isStatic);
0236 
0237     jint (JNICALL *Throw)
0238       (JNIEnv *env, jthrowable obj);
0239     jint (JNICALL *ThrowNew)
0240       (JNIEnv *env, jclass clazz, const char *msg);
0241     jthrowable (JNICALL *ExceptionOccurred)
0242       (JNIEnv *env);
0243     void (JNICALL *ExceptionDescribe)
0244       (JNIEnv *env);
0245     void (JNICALL *ExceptionClear)
0246       (JNIEnv *env);
0247     void (JNICALL *FatalError)
0248       (JNIEnv *env, const char *msg);
0249 
0250     jint (JNICALL *PushLocalFrame)
0251       (JNIEnv *env, jint capacity);
0252     jobject (JNICALL *PopLocalFrame)
0253       (JNIEnv *env, jobject result);
0254 
0255     jobject (JNICALL *NewGlobalRef)
0256       (JNIEnv *env, jobject lobj);
0257     void (JNICALL *DeleteGlobalRef)
0258       (JNIEnv *env, jobject gref);
0259     void (JNICALL *DeleteLocalRef)
0260       (JNIEnv *env, jobject obj);
0261     jboolean (JNICALL *IsSameObject)
0262       (JNIEnv *env, jobject obj1, jobject obj2);
0263     jobject (JNICALL *NewLocalRef)
0264       (JNIEnv *env, jobject ref);
0265     jint (JNICALL *EnsureLocalCapacity)
0266       (JNIEnv *env, jint capacity);
0267 
0268     jobject (JNICALL *AllocObject)
0269       (JNIEnv *env, jclass clazz);
0270     jobject (JNICALL *NewObject)
0271       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
0272     jobject (JNICALL *NewObjectV)
0273       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
0274     jobject (JNICALL *NewObjectA)
0275       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
0276 
0277     jclass (JNICALL *GetObjectClass)
0278       (JNIEnv *env, jobject obj);
0279     jboolean (JNICALL *IsInstanceOf)
0280       (JNIEnv *env, jobject obj, jclass clazz);
0281 
0282     jmethodID (JNICALL *GetMethodID)
0283       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
0284 
0285     jobject (JNICALL *CallObjectMethod)
0286       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
0287     jobject (JNICALL *CallObjectMethodV)
0288       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
0289     jobject (JNICALL *CallObjectMethodA)
0290       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);
0291 
0292     jboolean (JNICALL *CallBooleanMethod)
0293       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
0294     jboolean (JNICALL *CallBooleanMethodV)
0295       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
0296     jboolean (JNICALL *CallBooleanMethodA)
0297       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);
0298 
0299     jbyte (JNICALL *CallByteMethod)
0300       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
0301     jbyte (JNICALL *CallByteMethodV)
0302       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
0303     jbyte (JNICALL *CallByteMethodA)
0304       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
0305 
0306     jchar (JNICALL *CallCharMethod)
0307       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
0308     jchar (JNICALL *CallCharMethodV)
0309       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
0310     jchar (JNICALL *CallCharMethodA)
0311       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
0312 
0313     jshort (JNICALL *CallShortMethod)
0314       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
0315     jshort (JNICALL *CallShortMethodV)
0316       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
0317     jshort (JNICALL *CallShortMethodA)
0318       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
0319 
0320     jint (JNICALL *CallIntMethod)
0321       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
0322     jint (JNICALL *CallIntMethodV)
0323       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
0324     jint (JNICALL *CallIntMethodA)
0325       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
0326 
0327     jlong (JNICALL *CallLongMethod)
0328       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
0329     jlong (JNICALL *CallLongMethodV)
0330       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
0331     jlong (JNICALL *CallLongMethodA)
0332       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
0333 
0334     jfloat (JNICALL *CallFloatMethod)
0335       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
0336     jfloat (JNICALL *CallFloatMethodV)
0337       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
0338     jfloat (JNICALL *CallFloatMethodA)
0339       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
0340 
0341     jdouble (JNICALL *CallDoubleMethod)
0342       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
0343     jdouble (JNICALL *CallDoubleMethodV)
0344       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
0345     jdouble (JNICALL *CallDoubleMethodA)
0346       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
0347 
0348     void (JNICALL *CallVoidMethod)
0349       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
0350     void (JNICALL *CallVoidMethodV)
0351       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
0352     void (JNICALL *CallVoidMethodA)
0353       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);
0354 
0355     jobject (JNICALL *CallNonvirtualObjectMethod)
0356       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
0357     jobject (JNICALL *CallNonvirtualObjectMethodV)
0358       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, 
0359        va_list args);
0360     jobject (JNICALL *CallNonvirtualObjectMethodA)
0361       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, 
0362        jvalue * args);
0363 
0364     jboolean (JNICALL *CallNonvirtualBooleanMethod)
0365       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
0366     jboolean (JNICALL *CallNonvirtualBooleanMethodV)
0367       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
0368        va_list args);
0369     jboolean (JNICALL *CallNonvirtualBooleanMethodA)
0370       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
0371        jvalue * args);
0372 
0373     jbyte (JNICALL *CallNonvirtualByteMethod)
0374       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
0375     jbyte (JNICALL *CallNonvirtualByteMethodV)
0376       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
0377        va_list args);
0378     jbyte (JNICALL *CallNonvirtualByteMethodA)
0379       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, 
0380        jvalue *args);
0381 
0382     jchar (JNICALL *CallNonvirtualCharMethod)
0383       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
0384     jchar (JNICALL *CallNonvirtualCharMethodV)
0385       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
0386        va_list args);
0387     jchar (JNICALL *CallNonvirtualCharMethodA)
0388       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
0389        jvalue *args);
0390 
0391     jshort (JNICALL *CallNonvirtualShortMethod)
0392       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
0393     jshort (JNICALL *CallNonvirtualShortMethodV)
0394       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
0395        va_list args);
0396     jshort (JNICALL *CallNonvirtualShortMethodA)
0397       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
0398        jvalue *args);
0399 
0400     jint (JNICALL *CallNonvirtualIntMethod)
0401       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
0402     jint (JNICALL *CallNonvirtualIntMethodV)
0403       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
0404        va_list args);
0405     jint (JNICALL *CallNonvirtualIntMethodA)
0406       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
0407        jvalue *args);
0408 
0409     jlong (JNICALL *CallNonvirtualLongMethod)
0410       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
0411     jlong (JNICALL *CallNonvirtualLongMethodV)
0412       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
0413        va_list args);
0414     jlong (JNICALL *CallNonvirtualLongMethodA)
0415       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, 
0416        jvalue *args);
0417 
0418     jfloat (JNICALL *CallNonvirtualFloatMethod)
0419       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
0420     jfloat (JNICALL *CallNonvirtualFloatMethodV)
0421       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
0422        va_list args);
0423     jfloat (JNICALL *CallNonvirtualFloatMethodA)
0424       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
0425        jvalue *args);
0426 
0427     jdouble (JNICALL *CallNonvirtualDoubleMethod)
0428       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
0429     jdouble (JNICALL *CallNonvirtualDoubleMethodV)
0430       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
0431        va_list args);
0432     jdouble (JNICALL *CallNonvirtualDoubleMethodA)
0433       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
0434        jvalue *args);
0435 
0436     void (JNICALL *CallNonvirtualVoidMethod)
0437       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
0438     void (JNICALL *CallNonvirtualVoidMethodV)
0439       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
0440        va_list args);
0441     void (JNICALL *CallNonvirtualVoidMethodA)
0442       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
0443        jvalue * args);
0444 
0445     jfieldID (JNICALL *GetFieldID)
0446       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
0447 
0448     jobject (JNICALL *GetObjectField)
0449       (JNIEnv *env, jobject obj, jfieldID fieldID);
0450     jboolean (JNICALL *GetBooleanField)
0451       (JNIEnv *env, jobject obj, jfieldID fieldID);
0452     jbyte (JNICALL *GetByteField)
0453       (JNIEnv *env, jobject obj, jfieldID fieldID);
0454     jchar (JNICALL *GetCharField)
0455       (JNIEnv *env, jobject obj, jfieldID fieldID);
0456     jshort (JNICALL *GetShortField)
0457       (JNIEnv *env, jobject obj, jfieldID fieldID);
0458     jint (JNICALL *GetIntField)
0459       (JNIEnv *env, jobject obj, jfieldID fieldID);
0460     jlong (JNICALL *GetLongField)
0461       (JNIEnv *env, jobject obj, jfieldID fieldID);
0462     jfloat (JNICALL *GetFloatField)
0463       (JNIEnv *env, jobject obj, jfieldID fieldID);
0464     jdouble (JNICALL *GetDoubleField)
0465       (JNIEnv *env, jobject obj, jfieldID fieldID);
0466 
0467     void (JNICALL *SetObjectField)
0468       (JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);
0469     void (JNICALL *SetBooleanField)
0470       (JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);
0471     void (JNICALL *SetByteField)
0472       (JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);
0473     void (JNICALL *SetCharField)
0474       (JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);
0475     void (JNICALL *SetShortField)
0476       (JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);
0477     void (JNICALL *SetIntField)
0478       (JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
0479     void (JNICALL *SetLongField)
0480       (JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);
0481     void (JNICALL *SetFloatField)
0482       (JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);
0483     void (JNICALL *SetDoubleField)
0484       (JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);
0485 
0486     jmethodID (JNICALL *GetStaticMethodID)
0487       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
0488 
0489     jobject (JNICALL *CallStaticObjectMethod)
0490       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
0491     jobject (JNICALL *CallStaticObjectMethodV)
0492       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
0493     jobject (JNICALL *CallStaticObjectMethodA)
0494       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
0495 
0496     jboolean (JNICALL *CallStaticBooleanMethod)
0497       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
0498     jboolean (JNICALL *CallStaticBooleanMethodV)
0499       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
0500     jboolean (JNICALL *CallStaticBooleanMethodA)
0501       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
0502 
0503     jbyte (JNICALL *CallStaticByteMethod)
0504       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
0505     jbyte (JNICALL *CallStaticByteMethodV)
0506       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
0507     jbyte (JNICALL *CallStaticByteMethodA)
0508       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
0509 
0510     jchar (JNICALL *CallStaticCharMethod)
0511       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
0512     jchar (JNICALL *CallStaticCharMethodV)
0513       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
0514     jchar (JNICALL *CallStaticCharMethodA)
0515       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
0516 
0517     jshort (JNICALL *CallStaticShortMethod)
0518       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
0519     jshort (JNICALL *CallStaticShortMethodV)
0520       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
0521     jshort (JNICALL *CallStaticShortMethodA)
0522       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
0523 
0524     jint (JNICALL *CallStaticIntMethod)
0525       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
0526     jint (JNICALL *CallStaticIntMethodV)
0527       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
0528     jint (JNICALL *CallStaticIntMethodA)
0529       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
0530 
0531     jlong (JNICALL *CallStaticLongMethod)
0532       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
0533     jlong (JNICALL *CallStaticLongMethodV)
0534       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
0535     jlong (JNICALL *CallStaticLongMethodA)
0536       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
0537 
0538     jfloat (JNICALL *CallStaticFloatMethod)
0539       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
0540     jfloat (JNICALL *CallStaticFloatMethodV)
0541       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
0542     jfloat (JNICALL *CallStaticFloatMethodA)
0543       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
0544 
0545     jdouble (JNICALL *CallStaticDoubleMethod)
0546       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
0547     jdouble (JNICALL *CallStaticDoubleMethodV)
0548       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
0549     jdouble (JNICALL *CallStaticDoubleMethodA)       
0550       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
0551 
0552     void (JNICALL *CallStaticVoidMethod)
0553       (JNIEnv *env, jclass cls, jmethodID methodID, ...);
0554     void (JNICALL *CallStaticVoidMethodV)
0555       (JNIEnv *env, jclass cls, jmethodID methodID, va_list args);
0556     void (JNICALL *CallStaticVoidMethodA)
0557       (JNIEnv *env, jclass cls, jmethodID methodID, jvalue * args);
0558 
0559     jfieldID (JNICALL *GetStaticFieldID)
0560       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
0561     jobject (JNICALL *GetStaticObjectField)
0562       (JNIEnv *env, jclass clazz, jfieldID fieldID);
0563     jboolean (JNICALL *GetStaticBooleanField)
0564       (JNIEnv *env, jclass clazz, jfieldID fieldID);
0565     jbyte (JNICALL *GetStaticByteField)
0566       (JNIEnv *env, jclass clazz, jfieldID fieldID);
0567     jchar (JNICALL *GetStaticCharField)
0568       (JNIEnv *env, jclass clazz, jfieldID fieldID);
0569     jshort (JNICALL *GetStaticShortField)
0570       (JNIEnv *env, jclass clazz, jfieldID fieldID);
0571     jint (JNICALL *GetStaticIntField)
0572       (JNIEnv *env, jclass clazz, jfieldID fieldID);
0573     jlong (JNICALL *GetStaticLongField)
0574       (JNIEnv *env, jclass clazz, jfieldID fieldID);
0575     jfloat (JNICALL *GetStaticFloatField)
0576       (JNIEnv *env, jclass clazz, jfieldID fieldID);
0577     jdouble (JNICALL *GetStaticDoubleField)
0578       (JNIEnv *env, jclass clazz, jfieldID fieldID);
0579 
0580     void (JNICALL *SetStaticObjectField)
0581       (JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value);
0582     void (JNICALL *SetStaticBooleanField)
0583       (JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value);
0584     void (JNICALL *SetStaticByteField)
0585       (JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value);
0586     void (JNICALL *SetStaticCharField)
0587       (JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value);
0588     void (JNICALL *SetStaticShortField)
0589       (JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value);
0590     void (JNICALL *SetStaticIntField)
0591       (JNIEnv *env, jclass clazz, jfieldID fieldID, jint value);
0592     void (JNICALL *SetStaticLongField)
0593       (JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value);
0594     void (JNICALL *SetStaticFloatField)
0595       (JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value);
0596     void (JNICALL *SetStaticDoubleField)
0597       (JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value);
0598 
0599     jstring (JNICALL *NewString)
0600       (JNIEnv *env, const jchar *unicode, jsize len);
0601     jsize (JNICALL *GetStringLength)
0602       (JNIEnv *env, jstring str);
0603     const jchar *(JNICALL *GetStringChars)
0604       (JNIEnv *env, jstring str, jboolean *isCopy);
0605     void (JNICALL *ReleaseStringChars)
0606       (JNIEnv *env, jstring str, const jchar *chars);
0607   
0608     jstring (JNICALL *NewStringUTF)
0609       (JNIEnv *env, const char *utf);
0610     jsize (JNICALL *GetStringUTFLength)
0611       (JNIEnv *env, jstring str);
0612     const char* (JNICALL *GetStringUTFChars)
0613       (JNIEnv *env, jstring str, jboolean *isCopy);
0614     void (JNICALL *ReleaseStringUTFChars)
0615       (JNIEnv *env, jstring str, const char* chars);
0616   
0617 
0618     jsize (JNICALL *GetArrayLength)
0619       (JNIEnv *env, jarray array);
0620 
0621     jobjectArray (JNICALL *NewObjectArray)
0622       (JNIEnv *env, jsize len, jclass clazz, jobject init);
0623     jobject (JNICALL *GetObjectArrayElement)
0624       (JNIEnv *env, jobjectArray array, jsize index);
0625     void (JNICALL *SetObjectArrayElement)
0626       (JNIEnv *env, jobjectArray array, jsize index, jobject val);
0627 
0628     jbooleanArray (JNICALL *NewBooleanArray)
0629       (JNIEnv *env, jsize len);
0630     jbyteArray (JNICALL *NewByteArray)
0631       (JNIEnv *env, jsize len);
0632     jcharArray (JNICALL *NewCharArray)
0633       (JNIEnv *env, jsize len);
0634     jshortArray (JNICALL *NewShortArray)
0635       (JNIEnv *env, jsize len);
0636     jintArray (JNICALL *NewIntArray)
0637       (JNIEnv *env, jsize len);
0638     jlongArray (JNICALL *NewLongArray)
0639       (JNIEnv *env, jsize len);
0640     jfloatArray (JNICALL *NewFloatArray)
0641       (JNIEnv *env, jsize len);
0642     jdoubleArray (JNICALL *NewDoubleArray)
0643       (JNIEnv *env, jsize len);
0644 
0645     jboolean * (JNICALL *GetBooleanArrayElements)
0646       (JNIEnv *env, jbooleanArray array, jboolean *isCopy);
0647     jbyte * (JNICALL *GetByteArrayElements)
0648       (JNIEnv *env, jbyteArray array, jboolean *isCopy);
0649     jchar * (JNICALL *GetCharArrayElements)
0650       (JNIEnv *env, jcharArray array, jboolean *isCopy);
0651     jshort * (JNICALL *GetShortArrayElements)
0652       (JNIEnv *env, jshortArray array, jboolean *isCopy);
0653     jint * (JNICALL *GetIntArrayElements)
0654       (JNIEnv *env, jintArray array, jboolean *isCopy);
0655     jlong * (JNICALL *GetLongArrayElements)
0656       (JNIEnv *env, jlongArray array, jboolean *isCopy);
0657     jfloat * (JNICALL *GetFloatArrayElements)
0658       (JNIEnv *env, jfloatArray array, jboolean *isCopy);
0659     jdouble * (JNICALL *GetDoubleArrayElements)
0660       (JNIEnv *env, jdoubleArray array, jboolean *isCopy);
0661 
0662     void (JNICALL *ReleaseBooleanArrayElements)
0663       (JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode);
0664     void (JNICALL *ReleaseByteArrayElements)
0665       (JNIEnv *env, jbyteArray array, jbyte *elems, jint mode);
0666     void (JNICALL *ReleaseCharArrayElements)
0667       (JNIEnv *env, jcharArray array, jchar *elems, jint mode);
0668     void (JNICALL *ReleaseShortArrayElements)
0669       (JNIEnv *env, jshortArray array, jshort *elems, jint mode);
0670     void (JNICALL *ReleaseIntArrayElements)
0671       (JNIEnv *env, jintArray array, jint *elems, jint mode);
0672     void (JNICALL *ReleaseLongArrayElements)
0673       (JNIEnv *env, jlongArray array, jlong *elems, jint mode);
0674     void (JNICALL *ReleaseFloatArrayElements)
0675       (JNIEnv *env, jfloatArray array, jfloat *elems, jint mode);
0676     void (JNICALL *ReleaseDoubleArrayElements)
0677       (JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode);
0678 
0679     void (JNICALL *GetBooleanArrayRegion)
0680       (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);
0681     void (JNICALL *GetByteArrayRegion)
0682       (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);
0683     void (JNICALL *GetCharArrayRegion)
0684       (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);
0685     void (JNICALL *GetShortArrayRegion)
0686       (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);
0687     void (JNICALL *GetIntArrayRegion)
0688       (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);
0689     void (JNICALL *GetLongArrayRegion)
0690       (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);
0691     void (JNICALL *GetFloatArrayRegion)
0692       (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);
0693     void (JNICALL *GetDoubleArrayRegion)
0694       (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);
0695 
0696     void (JNICALL *SetBooleanArrayRegion)
0697       (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);
0698     void (JNICALL *SetByteArrayRegion)
0699       (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);
0700     void (JNICALL *SetCharArrayRegion)
0701       (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);
0702     void (JNICALL *SetShortArrayRegion)
0703       (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);
0704     void (JNICALL *SetIntArrayRegion)
0705       (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);
0706     void (JNICALL *SetLongArrayRegion)
0707       (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);
0708     void (JNICALL *SetFloatArrayRegion)
0709       (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);
0710     void (JNICALL *SetDoubleArrayRegion)
0711       (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);
0712 
0713     jint (JNICALL *RegisterNatives)
0714       (JNIEnv *env, jclass clazz, const JNINativeMethod *methods, 
0715        jint nMethods);
0716     jint (JNICALL *UnregisterNatives)
0717       (JNIEnv *env, jclass clazz);
0718 
0719     jint (JNICALL *MonitorEnter)
0720       (JNIEnv *env, jobject obj);
0721     jint (JNICALL *MonitorExit)
0722       (JNIEnv *env, jobject obj);
0723  
0724     jint (JNICALL *GetJavaVM)
0725       (JNIEnv *env, JavaVM **vm);
0726 
0727     void (JNICALL *GetStringRegion)
0728       (JNIEnv *env, jstring str, jsize start, jsize len, jchar *buf);
0729     void (JNICALL *GetStringUTFRegion)
0730       (JNIEnv *env, jstring str, jsize start, jsize len, char *buf);
0731 
0732     void * (JNICALL *GetPrimitiveArrayCritical)
0733       (JNIEnv *env, jarray array, jboolean *isCopy);
0734     void (JNICALL *ReleasePrimitiveArrayCritical)
0735       (JNIEnv *env, jarray array, void *carray, jint mode);
0736 
0737     const jchar * (JNICALL *GetStringCritical)
0738       (JNIEnv *env, jstring string, jboolean *isCopy);
0739     void (JNICALL *ReleaseStringCritical)
0740       (JNIEnv *env, jstring string, const jchar *cstring);
0741 
0742     jweak (JNICALL *NewWeakGlobalRef)
0743        (JNIEnv *env, jobject obj);
0744     void (JNICALL *DeleteWeakGlobalRef)
0745        (JNIEnv *env, jweak ref);
0746 
0747     jboolean (JNICALL *ExceptionCheck)
0748        (JNIEnv *env);
0749 
0750     jobject (JNICALL *NewDirectByteBuffer)
0751        (JNIEnv* env, void* address, jlong capacity);
0752     void* (JNICALL *GetDirectBufferAddress)
0753        (JNIEnv* env, jobject buf);
0754     jlong (JNICALL *GetDirectBufferCapacity)
0755        (JNIEnv* env, jobject buf);
0756 };
0757 
0758 /*
0759  * We use inlined functions for C++ so that programmers can write:
0760  * 
0761  *    env->FindClass("java/lang/String")
0762  *
0763  * in C++ rather than:
0764  *
0765  *    (*env)->FindClass(env, "java/lang/String")
0766  *
0767  * in C.
0768  */
0769 
0770 struct JNIEnv_ {
0771     const struct JNINativeInterface_ *functions;
0772 #ifdef __cplusplus
0773 
0774     jint GetVersion() {
0775         return functions->GetVersion(this);
0776     }
0777     jclass DefineClass(const char *name, jobject loader, const jbyte *buf,
0778                jsize len) {
0779         return functions->DefineClass(this, name, loader, buf, len);
0780     }
0781     jclass FindClass(const char *name) {
0782         return functions->FindClass(this, name);
0783     }
0784     jmethodID FromReflectedMethod(jobject method) {
0785         return functions->FromReflectedMethod(this,method);
0786     }
0787     jfieldID FromReflectedField(jobject field) {
0788         return functions->FromReflectedField(this,field);
0789     }
0790 
0791     jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic) {
0792         return functions->ToReflectedMethod(this, cls, methodID, isStatic);
0793     }
0794 
0795     jclass GetSuperclass(jclass sub) {
0796         return functions->GetSuperclass(this, sub);
0797     }
0798     jboolean IsAssignableFrom(jclass sub, jclass sup) {
0799         return functions->IsAssignableFrom(this, sub, sup);
0800     }
0801 
0802     jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic) {
0803         return functions->ToReflectedField(this,cls,fieldID,isStatic);
0804     }
0805 
0806     jint Throw(jthrowable obj) {
0807         return functions->Throw(this, obj);
0808     }    
0809     jint ThrowNew(jclass clazz, const char *msg) {
0810         return functions->ThrowNew(this, clazz, msg);
0811     }
0812     jthrowable ExceptionOccurred() {
0813         return functions->ExceptionOccurred(this);
0814     }
0815     void ExceptionDescribe() {
0816         functions->ExceptionDescribe(this);
0817     }
0818     void ExceptionClear() {
0819         functions->ExceptionClear(this);
0820     }
0821     void FatalError(const char *msg) {
0822         functions->FatalError(this, msg);
0823     }
0824 
0825     jint PushLocalFrame(jint capacity) {
0826         return functions->PushLocalFrame(this,capacity);
0827     }
0828     jobject PopLocalFrame(jobject result) {
0829         return functions->PopLocalFrame(this,result);
0830     }
0831 
0832     jobject NewGlobalRef(jobject lobj) {
0833         return functions->NewGlobalRef(this,lobj);
0834     }
0835     void DeleteGlobalRef(jobject gref) {
0836         functions->DeleteGlobalRef(this,gref);
0837     }
0838     void DeleteLocalRef(jobject obj) {
0839         functions->DeleteLocalRef(this, obj);
0840     }
0841 
0842     jboolean IsSameObject(jobject obj1, jobject obj2) {
0843         return functions->IsSameObject(this,obj1,obj2);
0844     }
0845 
0846     jobject NewLocalRef(jobject ref) {
0847         return functions->NewLocalRef(this,ref);
0848     }
0849     jint EnsureLocalCapacity(jint capacity) {
0850         return functions->EnsureLocalCapacity(this,capacity);
0851     }
0852 
0853     jobject AllocObject(jclass clazz) {
0854         return functions->AllocObject(this,clazz);
0855     }
0856     jobject NewObject(jclass clazz, jmethodID methodID, ...) {
0857         va_list args;
0858     jobject result;
0859     va_start(args, methodID);
0860         result = functions->NewObjectV(this,clazz,methodID,args);
0861     va_end(args);
0862     return result;
0863     }
0864     jobject NewObjectV(jclass clazz, jmethodID methodID, 
0865                va_list args) {
0866         return functions->NewObjectV(this,clazz,methodID,args);
0867     }
0868     jobject NewObjectA(jclass clazz, jmethodID methodID, 
0869                jvalue *args) {
0870         return functions->NewObjectA(this,clazz,methodID,args);
0871     }
0872 
0873     jclass GetObjectClass(jobject obj) {
0874         return functions->GetObjectClass(this,obj);
0875     }
0876     jboolean IsInstanceOf(jobject obj, jclass clazz) {
0877         return functions->IsInstanceOf(this,obj,clazz);
0878     }
0879 
0880     jmethodID GetMethodID(jclass clazz, const char *name, 
0881               const char *sig) {
0882         return functions->GetMethodID(this,clazz,name,sig);
0883     }
0884 
0885     jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {
0886         va_list args;
0887     jobject result;
0888     va_start(args,methodID);
0889     result = functions->CallObjectMethodV(this,obj,methodID,args);
0890     va_end(args);
0891     return result;
0892     }
0893     jobject CallObjectMethodV(jobject obj, jmethodID methodID, 
0894             va_list args) {
0895         return functions->CallObjectMethodV(this,obj,methodID,args);
0896     }
0897     jobject CallObjectMethodA(jobject obj, jmethodID methodID, 
0898             jvalue * args) {
0899         return functions->CallObjectMethodA(this,obj,methodID,args);
0900     }
0901 
0902     jboolean CallBooleanMethod(jobject obj, 
0903                    jmethodID methodID, ...) {
0904         va_list args;
0905     jboolean result;
0906     va_start(args,methodID);
0907     result = functions->CallBooleanMethodV(this,obj,methodID,args);
0908     va_end(args);
0909     return result;
0910     }
0911     jboolean CallBooleanMethodV(jobject obj, jmethodID methodID, 
0912                 va_list args) {
0913         return functions->CallBooleanMethodV(this,obj,methodID,args);
0914     }
0915     jboolean CallBooleanMethodA(jobject obj, jmethodID methodID, 
0916                 jvalue * args) {
0917         return functions->CallBooleanMethodA(this,obj,methodID, args);
0918     }
0919 
0920     jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {
0921         va_list args;
0922     jbyte result;
0923     va_start(args,methodID);
0924     result = functions->CallByteMethodV(this,obj,methodID,args);
0925     va_end(args);
0926     return result;
0927     }
0928     jbyte CallByteMethodV(jobject obj, jmethodID methodID, 
0929               va_list args) {
0930         return functions->CallByteMethodV(this,obj,methodID,args);
0931     }
0932     jbyte CallByteMethodA(jobject obj, jmethodID methodID, 
0933               jvalue * args) {
0934         return functions->CallByteMethodA(this,obj,methodID,args);
0935     }
0936 
0937     jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {
0938         va_list args;
0939     jchar result;
0940     va_start(args,methodID);
0941     result = functions->CallCharMethodV(this,obj,methodID,args);
0942     va_end(args);
0943     return result;
0944     }
0945     jchar CallCharMethodV(jobject obj, jmethodID methodID, 
0946               va_list args) {
0947         return functions->CallCharMethodV(this,obj,methodID,args);
0948     }
0949     jchar CallCharMethodA(jobject obj, jmethodID methodID, 
0950               jvalue * args) {
0951         return functions->CallCharMethodA(this,obj,methodID,args);
0952     }
0953 
0954     jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {
0955         va_list args;
0956     jshort result;
0957     va_start(args,methodID);
0958     result = functions->CallShortMethodV(this,obj,methodID,args);
0959     va_end(args);
0960     return result;
0961     }
0962     jshort CallShortMethodV(jobject obj, jmethodID methodID, 
0963                 va_list args) {
0964         return functions->CallShortMethodV(this,obj,methodID,args);
0965     }
0966     jshort CallShortMethodA(jobject obj, jmethodID methodID, 
0967                 jvalue * args) {
0968         return functions->CallShortMethodA(this,obj,methodID,args);
0969     }
0970 
0971     jint CallIntMethod(jobject obj, jmethodID methodID, ...) {
0972         va_list args;
0973     jint result;
0974     va_start(args,methodID);
0975     result = functions->CallIntMethodV(this,obj,methodID,args);
0976     va_end(args);
0977     return result;
0978     }
0979     jint CallIntMethodV(jobject obj, jmethodID methodID, 
0980             va_list args) {
0981         return functions->CallIntMethodV(this,obj,methodID,args);
0982     }
0983     jint CallIntMethodA(jobject obj, jmethodID methodID, 
0984             jvalue * args) {
0985         return functions->CallIntMethodA(this,obj,methodID,args);
0986     }
0987 
0988     jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {
0989         va_list args;
0990     jlong result;
0991     va_start(args,methodID);
0992     result = functions->CallLongMethodV(this,obj,methodID,args);
0993     va_end(args);
0994     return result;
0995     }
0996     jlong CallLongMethodV(jobject obj, jmethodID methodID, 
0997               va_list args) {
0998         return functions->CallLongMethodV(this,obj,methodID,args);
0999     }
1000     jlong CallLongMethodA(jobject obj, jmethodID methodID, 
1001               jvalue * args) {
1002         return functions->CallLongMethodA(this,obj,methodID,args);
1003     }
1004 
1005     jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {
1006         va_list args;
1007     jfloat result;
1008     va_start(args,methodID);
1009     result = functions->CallFloatMethodV(this,obj,methodID,args);
1010     va_end(args);
1011     return result;
1012     }
1013     jfloat CallFloatMethodV(jobject obj, jmethodID methodID, 
1014                 va_list args) {
1015         return functions->CallFloatMethodV(this,obj,methodID,args);
1016     }
1017     jfloat CallFloatMethodA(jobject obj, jmethodID methodID, 
1018                 jvalue * args) {
1019         return functions->CallFloatMethodA(this,obj,methodID,args);
1020     }
1021 
1022     jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {
1023         va_list args;
1024     jdouble result;
1025     va_start(args,methodID);
1026     result = functions->CallDoubleMethodV(this,obj,methodID,args);
1027     va_end(args);
1028     return result;
1029     }
1030     jdouble CallDoubleMethodV(jobject obj, jmethodID methodID, 
1031             va_list args) {
1032         return functions->CallDoubleMethodV(this,obj,methodID,args);
1033     }
1034     jdouble CallDoubleMethodA(jobject obj, jmethodID methodID, 
1035             jvalue * args) {
1036         return functions->CallDoubleMethodA(this,obj,methodID,args);
1037     }
1038 
1039     void CallVoidMethod(jobject obj, jmethodID methodID, ...) {
1040         va_list args;
1041     va_start(args,methodID);
1042     functions->CallVoidMethodV(this,obj,methodID,args);
1043     va_end(args);
1044     }
1045     void CallVoidMethodV(jobject obj, jmethodID methodID, 
1046              va_list args) {
1047         functions->CallVoidMethodV(this,obj,methodID,args);
1048     }
1049     void CallVoidMethodA(jobject obj, jmethodID methodID, 
1050              jvalue * args) {
1051         functions->CallVoidMethodA(this,obj,methodID,args);
1052     }
1053 
1054     jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz, 
1055                        jmethodID methodID, ...) {
1056         va_list args;
1057     jobject result;
1058     va_start(args,methodID);
1059     result = functions->CallNonvirtualObjectMethodV(this,obj,clazz,
1060                             methodID,args);
1061     va_end(args);
1062     return result;
1063     }
1064     jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz, 
1065                     jmethodID methodID, va_list args) {
1066         return functions->CallNonvirtualObjectMethodV(this,obj,clazz,
1067                               methodID,args);
1068     }
1069     jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz, 
1070                     jmethodID methodID, jvalue * args) {
1071         return functions->CallNonvirtualObjectMethodA(this,obj,clazz,
1072                               methodID,args);
1073     }
1074 
1075     jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz, 
1076                      jmethodID methodID, ...) {
1077         va_list args;
1078     jboolean result;
1079     va_start(args,methodID);
1080     result = functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
1081                              methodID,args);
1082     va_end(args);
1083     return result;
1084     }
1085     jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz, 
1086                       jmethodID methodID, va_list args) {
1087         return functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
1088                                methodID,args);
1089     }
1090     jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz, 
1091                       jmethodID methodID, jvalue * args) {
1092         return functions->CallNonvirtualBooleanMethodA(this,obj,clazz,
1093                                methodID, args);
1094     }
1095 
1096     jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz, 
1097                    jmethodID methodID, ...) {
1098         va_list args;
1099     jbyte result;
1100     va_start(args,methodID);
1101     result = functions->CallNonvirtualByteMethodV(this,obj,clazz,
1102                               methodID,args);
1103     va_end(args);
1104     return result;
1105     }
1106     jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz, 
1107                     jmethodID methodID, va_list args) {
1108         return functions->CallNonvirtualByteMethodV(this,obj,clazz,
1109                             methodID,args);
1110     }
1111     jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz, 
1112                     jmethodID methodID, jvalue * args) {
1113         return functions->CallNonvirtualByteMethodA(this,obj,clazz,
1114                             methodID,args);
1115     }
1116 
1117     jchar CallNonvirtualCharMethod(jobject obj, jclass clazz, 
1118                    jmethodID methodID, ...) {
1119         va_list args;
1120     jchar result;
1121     va_start(args,methodID);
1122     result = functions->CallNonvirtualCharMethodV(this,obj,clazz,
1123                               methodID,args);
1124     va_end(args);
1125     return result;
1126     }
1127     jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz, 
1128                     jmethodID methodID, va_list args) {
1129         return functions->CallNonvirtualCharMethodV(this,obj,clazz,
1130                             methodID,args);
1131     }
1132     jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz, 
1133                     jmethodID methodID, jvalue * args) {
1134         return functions->CallNonvirtualCharMethodA(this,obj,clazz,
1135                             methodID,args);
1136     }
1137 
1138     jshort CallNonvirtualShortMethod(jobject obj, jclass clazz, 
1139                      jmethodID methodID, ...) {
1140         va_list args;
1141     jshort result;
1142     va_start(args,methodID);
1143     result = functions->CallNonvirtualShortMethodV(this,obj,clazz,
1144                                methodID,args);
1145     va_end(args);
1146     return result;
1147     }
1148     jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz, 
1149                       jmethodID methodID, va_list args) {
1150         return functions->CallNonvirtualShortMethodV(this,obj,clazz,
1151                              methodID,args);
1152     }
1153     jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,
1154                       jmethodID methodID, jvalue * args) {
1155         return functions->CallNonvirtualShortMethodA(this,obj,clazz,
1156                              methodID,args);
1157     }
1158 
1159     jint CallNonvirtualIntMethod(jobject obj, jclass clazz, 
1160                  jmethodID methodID, ...) {
1161         va_list args;
1162     jint result;
1163     va_start(args,methodID);
1164     result = functions->CallNonvirtualIntMethodV(this,obj,clazz,
1165                              methodID,args);
1166     va_end(args);
1167     return result;
1168     }
1169     jint CallNonvirtualIntMethodV(jobject obj, jclass clazz, 
1170                   jmethodID methodID, va_list args) {
1171         return functions->CallNonvirtualIntMethodV(this,obj,clazz,
1172                            methodID,args);
1173     }
1174     jint CallNonvirtualIntMethodA(jobject obj, jclass clazz, 
1175                   jmethodID methodID, jvalue * args) {
1176         return functions->CallNonvirtualIntMethodA(this,obj,clazz,
1177                            methodID,args);
1178     }
1179 
1180     jlong CallNonvirtualLongMethod(jobject obj, jclass clazz,
1181                    jmethodID methodID, ...) {
1182         va_list args;
1183     jlong result;
1184     va_start(args,methodID);
1185     result = functions->CallNonvirtualLongMethodV(this,obj,clazz,
1186                               methodID,args);
1187     va_end(args);
1188     return result;
1189     }
1190     jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz,
1191                     jmethodID methodID, va_list args) {
1192         return functions->CallNonvirtualLongMethodV(this,obj,clazz,
1193                             methodID,args);
1194     }
1195     jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz, 
1196                     jmethodID methodID, jvalue * args) {
1197         return functions->CallNonvirtualLongMethodA(this,obj,clazz,
1198                             methodID,args);
1199     }
1200 
1201     jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz, 
1202                      jmethodID methodID, ...) {
1203         va_list args;
1204     jfloat result;
1205     va_start(args,methodID);
1206     result = functions->CallNonvirtualFloatMethodV(this,obj,clazz,
1207                                methodID,args);
1208     va_end(args);
1209     return result;
1210     }
1211     jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz,
1212                       jmethodID methodID, 
1213                       va_list args) {
1214         return functions->CallNonvirtualFloatMethodV(this,obj,clazz,
1215                              methodID,args);
1216     }
1217     jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz, 
1218                       jmethodID methodID, 
1219                       jvalue * args) {
1220         return functions->CallNonvirtualFloatMethodA(this,obj,clazz,
1221                              methodID,args);
1222     }
1223 
1224     jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz,
1225                        jmethodID methodID, ...) {
1226         va_list args;
1227     jdouble result;
1228     va_start(args,methodID);
1229     result = functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
1230                             methodID,args);
1231     va_end(args);
1232     return result;
1233     }
1234     jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz,
1235                     jmethodID methodID, 
1236                     va_list args) {
1237         return functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
1238                               methodID,args);
1239     }
1240     jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz, 
1241                     jmethodID methodID, 
1242                     jvalue * args) {
1243         return functions->CallNonvirtualDoubleMethodA(this,obj,clazz,
1244                               methodID,args);
1245     }
1246 
1247     void CallNonvirtualVoidMethod(jobject obj, jclass clazz,
1248                   jmethodID methodID, ...) {
1249         va_list args;
1250     va_start(args,methodID);
1251     functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
1252     va_end(args);
1253     }
1254     void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,
1255                    jmethodID methodID, 
1256                    va_list args) {
1257         functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
1258     }
1259     void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,
1260                    jmethodID methodID, 
1261                    jvalue * args) {
1262         functions->CallNonvirtualVoidMethodA(this,obj,clazz,methodID,args);
1263     }
1264 
1265     jfieldID GetFieldID(jclass clazz, const char *name, 
1266             const char *sig) {
1267         return functions->GetFieldID(this,clazz,name,sig);
1268     }
1269 
1270     jobject GetObjectField(jobject obj, jfieldID fieldID) {
1271         return functions->GetObjectField(this,obj,fieldID);
1272     }
1273     jboolean GetBooleanField(jobject obj, jfieldID fieldID) {
1274         return functions->GetBooleanField(this,obj,fieldID);
1275     }
1276     jbyte GetByteField(jobject obj, jfieldID fieldID) {
1277         return functions->GetByteField(this,obj,fieldID);
1278     }
1279     jchar GetCharField(jobject obj, jfieldID fieldID) {
1280         return functions->GetCharField(this,obj,fieldID);
1281     }
1282     jshort GetShortField(jobject obj, jfieldID fieldID) {
1283         return functions->GetShortField(this,obj,fieldID);
1284     }
1285     jint GetIntField(jobject obj, jfieldID fieldID) {
1286         return functions->GetIntField(this,obj,fieldID);
1287     }
1288     jlong GetLongField(jobject obj, jfieldID fieldID) {
1289         return functions->GetLongField(this,obj,fieldID);
1290     }
1291     jfloat GetFloatField(jobject obj, jfieldID fieldID) {
1292         return functions->GetFloatField(this,obj,fieldID);
1293     }
1294     jdouble GetDoubleField(jobject obj, jfieldID fieldID) {
1295         return functions->GetDoubleField(this,obj,fieldID);
1296     }
1297 
1298     void SetObjectField(jobject obj, jfieldID fieldID, jobject val) {
1299         functions->SetObjectField(this,obj,fieldID,val);
1300     }
1301     void SetBooleanField(jobject obj, jfieldID fieldID, 
1302              jboolean val) {
1303         functions->SetBooleanField(this,obj,fieldID,val);
1304     }
1305     void SetByteField(jobject obj, jfieldID fieldID, 
1306               jbyte val) {
1307         functions->SetByteField(this,obj,fieldID,val);
1308     }
1309     void SetCharField(jobject obj, jfieldID fieldID, 
1310               jchar val) {
1311         functions->SetCharField(this,obj,fieldID,val);
1312     }
1313     void SetShortField(jobject obj, jfieldID fieldID,
1314                jshort val) {
1315         functions->SetShortField(this,obj,fieldID,val);
1316     }
1317     void SetIntField(jobject obj, jfieldID fieldID, 
1318              jint val) {
1319         functions->SetIntField(this,obj,fieldID,val);
1320     }
1321     void SetLongField(jobject obj, jfieldID fieldID, 
1322               jlong val) {
1323         functions->SetLongField(this,obj,fieldID,val);
1324     }
1325     void SetFloatField(jobject obj, jfieldID fieldID, 
1326                jfloat val) {
1327         functions->SetFloatField(this,obj,fieldID,val);
1328     }
1329     void SetDoubleField(jobject obj, jfieldID fieldID, 
1330             jdouble val) {
1331         functions->SetDoubleField(this,obj,fieldID,val);
1332     }
1333 
1334     jmethodID GetStaticMethodID(jclass clazz, const char *name, 
1335                 const char *sig) {
1336         return functions->GetStaticMethodID(this,clazz,name,sig);
1337     }
1338 
1339     jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID, 
1340                  ...) {
1341         va_list args;
1342     jobject result;
1343     va_start(args,methodID);
1344     result = functions->CallStaticObjectMethodV(this,clazz,methodID,args);
1345     va_end(args);
1346     return result;
1347     }
1348     jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID, 
1349                   va_list args) {
1350         return functions->CallStaticObjectMethodV(this,clazz,methodID,args);
1351     }
1352     jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID, 
1353                   jvalue *args) {
1354         return functions->CallStaticObjectMethodA(this,clazz,methodID,args);
1355     }
1356 
1357     jboolean CallStaticBooleanMethod(jclass clazz, 
1358                      jmethodID methodID, ...) {
1359         va_list args;
1360     jboolean result;
1361     va_start(args,methodID);
1362     result = functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
1363     va_end(args);
1364     return result;
1365     }
1366     jboolean CallStaticBooleanMethodV(jclass clazz,
1367                       jmethodID methodID, va_list args) {
1368         return functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
1369     }
1370     jboolean CallStaticBooleanMethodA(jclass clazz,
1371                       jmethodID methodID, jvalue *args) {
1372         return functions->CallStaticBooleanMethodA(this,clazz,methodID,args);
1373     }
1374 
1375     jbyte CallStaticByteMethod(jclass clazz,
1376                    jmethodID methodID, ...) {
1377         va_list args;
1378     jbyte result;
1379     va_start(args,methodID);
1380     result = functions->CallStaticByteMethodV(this,clazz,methodID,args);
1381     va_end(args);
1382     return result;
1383     }
1384     jbyte CallStaticByteMethodV(jclass clazz,
1385                 jmethodID methodID, va_list args) {
1386         return functions->CallStaticByteMethodV(this,clazz,methodID,args);
1387     }
1388     jbyte CallStaticByteMethodA(jclass clazz, 
1389                 jmethodID methodID, jvalue *args) {
1390         return functions->CallStaticByteMethodA(this,clazz,methodID,args);
1391     }
1392 
1393     jchar CallStaticCharMethod(jclass clazz,
1394                    jmethodID methodID, ...) {
1395         va_list args;
1396     jchar result;
1397     va_start(args,methodID);
1398     result = functions->CallStaticCharMethodV(this,clazz,methodID,args);
1399     va_end(args);
1400     return result;
1401     }
1402     jchar CallStaticCharMethodV(jclass clazz,
1403                 jmethodID methodID, va_list args) {
1404         return functions->CallStaticCharMethodV(this,clazz,methodID,args);
1405     }
1406     jchar CallStaticCharMethodA(jclass clazz,
1407                 jmethodID methodID, jvalue *args) {
1408         return functions->CallStaticCharMethodA(this,clazz,methodID,args);
1409     }
1410 
1411     jshort CallStaticShortMethod(jclass clazz,
1412                  jmethodID methodID, ...) {
1413         va_list args;
1414     jshort result;
1415     va_start(args,methodID);
1416     result = functions->CallStaticShortMethodV(this,clazz,methodID,args);
1417     va_end(args);
1418     return result;
1419     }
1420     jshort CallStaticShortMethodV(jclass clazz,
1421                   jmethodID methodID, va_list args) {
1422         return functions->CallStaticShortMethodV(this,clazz,methodID,args);
1423     }
1424     jshort CallStaticShortMethodA(jclass clazz,
1425                   jmethodID methodID, jvalue *args) {
1426         return functions->CallStaticShortMethodA(this,clazz,methodID,args);
1427     }
1428 
1429     jint CallStaticIntMethod(jclass clazz,
1430                  jmethodID methodID, ...) {
1431         va_list args;
1432     jint result;
1433     va_start(args,methodID);
1434     result = functions->CallStaticIntMethodV(this,clazz,methodID,args);
1435     va_end(args);
1436     return result;
1437     }
1438     jint CallStaticIntMethodV(jclass clazz,
1439                   jmethodID methodID, va_list args) {
1440         return functions->CallStaticIntMethodV(this,clazz,methodID,args);
1441     }
1442     jint CallStaticIntMethodA(jclass clazz, 
1443                   jmethodID methodID, jvalue *args) {
1444         return functions->CallStaticIntMethodA(this,clazz,methodID,args);
1445     }
1446 
1447     jlong CallStaticLongMethod(jclass clazz,
1448                    jmethodID methodID, ...) {
1449         va_list args;
1450     jlong result;
1451     va_start(args,methodID);
1452     result = functions->CallStaticLongMethodV(this,clazz,methodID,args);
1453     va_end(args);
1454     return result;
1455     }
1456     jlong CallStaticLongMethodV(jclass clazz, 
1457                 jmethodID methodID, va_list args) {
1458         return functions->CallStaticLongMethodV(this,clazz,methodID,args);
1459     }
1460     jlong CallStaticLongMethodA(jclass clazz, 
1461                 jmethodID methodID, jvalue *args) {
1462         return functions->CallStaticLongMethodA(this,clazz,methodID,args);
1463     }
1464 
1465     jfloat CallStaticFloatMethod(jclass clazz, 
1466                  jmethodID methodID, ...) {
1467         va_list args;
1468     jfloat result;
1469     va_start(args,methodID);
1470     result = functions->CallStaticFloatMethodV(this,clazz,methodID,args);
1471     va_end(args);
1472     return result;
1473     }
1474     jfloat CallStaticFloatMethodV(jclass clazz, 
1475                   jmethodID methodID, va_list args) {
1476         return functions->CallStaticFloatMethodV(this,clazz,methodID,args);
1477     }
1478     jfloat CallStaticFloatMethodA(jclass clazz, 
1479                   jmethodID methodID, jvalue *args) {
1480         return functions->CallStaticFloatMethodA(this,clazz,methodID,args);
1481     }
1482 
1483     jdouble CallStaticDoubleMethod(jclass clazz, 
1484                    jmethodID methodID, ...) {
1485         va_list args;
1486     jdouble result;
1487     va_start(args,methodID);
1488     result = functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
1489     va_end(args);
1490     return result;
1491     }
1492     jdouble CallStaticDoubleMethodV(jclass clazz, 
1493                     jmethodID methodID, va_list args) {
1494         return functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
1495     }
1496     jdouble CallStaticDoubleMethodA(jclass clazz, 
1497                     jmethodID methodID, jvalue *args) {
1498         return functions->CallStaticDoubleMethodA(this,clazz,methodID,args);
1499     }
1500 
1501     void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {
1502         va_list args;
1503     va_start(args,methodID);
1504     functions->CallStaticVoidMethodV(this,cls,methodID,args);
1505     va_end(args);
1506     }
1507     void CallStaticVoidMethodV(jclass cls, jmethodID methodID, 
1508                    va_list args) {
1509         functions->CallStaticVoidMethodV(this,cls,methodID,args);
1510     }
1511     void CallStaticVoidMethodA(jclass cls, jmethodID methodID, 
1512                    jvalue * args) {
1513         functions->CallStaticVoidMethodA(this,cls,methodID,args);
1514     }
1515 
1516     jfieldID GetStaticFieldID(jclass clazz, const char *name, 
1517                   const char *sig) {
1518         return functions->GetStaticFieldID(this,clazz,name,sig);
1519     }
1520     jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) {
1521         return functions->GetStaticObjectField(this,clazz,fieldID);
1522     }
1523     jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) {
1524         return functions->GetStaticBooleanField(this,clazz,fieldID);
1525     }
1526     jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) {
1527         return functions->GetStaticByteField(this,clazz,fieldID);
1528     }
1529     jchar GetStaticCharField(jclass clazz, jfieldID fieldID) {
1530         return functions->GetStaticCharField(this,clazz,fieldID);
1531     }
1532     jshort GetStaticShortField(jclass clazz, jfieldID fieldID) {
1533         return functions->GetStaticShortField(this,clazz,fieldID);
1534     }
1535     jint GetStaticIntField(jclass clazz, jfieldID fieldID) {
1536         return functions->GetStaticIntField(this,clazz,fieldID);
1537     }
1538     jlong GetStaticLongField(jclass clazz, jfieldID fieldID) {
1539         return functions->GetStaticLongField(this,clazz,fieldID);
1540     }
1541     jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) {
1542         return functions->GetStaticFloatField(this,clazz,fieldID);
1543     }
1544     jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) {
1545         return functions->GetStaticDoubleField(this,clazz,fieldID);
1546     }
1547 
1548     void SetStaticObjectField(jclass clazz, jfieldID fieldID,
1549             jobject value) {
1550       functions->SetStaticObjectField(this,clazz,fieldID,value);
1551     }
1552     void SetStaticBooleanField(jclass clazz, jfieldID fieldID,
1553             jboolean value) {
1554       functions->SetStaticBooleanField(this,clazz,fieldID,value);
1555     }
1556     void SetStaticByteField(jclass clazz, jfieldID fieldID,
1557             jbyte value) {
1558       functions->SetStaticByteField(this,clazz,fieldID,value);
1559     }
1560     void SetStaticCharField(jclass clazz, jfieldID fieldID,
1561             jchar value) {
1562       functions->SetStaticCharField(this,clazz,fieldID,value);
1563     }
1564     void SetStaticShortField(jclass clazz, jfieldID fieldID,
1565             jshort value) {
1566       functions->SetStaticShortField(this,clazz,fieldID,value);
1567     }
1568     void SetStaticIntField(jclass clazz, jfieldID fieldID,
1569             jint value) {
1570       functions->SetStaticIntField(this,clazz,fieldID,value);
1571     }
1572     void SetStaticLongField(jclass clazz, jfieldID fieldID,
1573             jlong value) {
1574       functions->SetStaticLongField(this,clazz,fieldID,value);
1575     }
1576     void SetStaticFloatField(jclass clazz, jfieldID fieldID,
1577             jfloat value) {
1578       functions->SetStaticFloatField(this,clazz,fieldID,value);
1579     }
1580     void SetStaticDoubleField(jclass clazz, jfieldID fieldID,
1581             jdouble value) {
1582       functions->SetStaticDoubleField(this,clazz,fieldID,value);
1583     }
1584 
1585     jstring NewString(const jchar *unicode, jsize len) {
1586         return functions->NewString(this,unicode,len);
1587     }
1588     jsize GetStringLength(jstring str) {
1589         return functions->GetStringLength(this,str);
1590     }
1591     const jchar *GetStringChars(jstring str, jboolean *isCopy) {
1592         return functions->GetStringChars(this,str,isCopy);
1593     }
1594     void ReleaseStringChars(jstring str, const jchar *chars) {
1595         functions->ReleaseStringChars(this,str,chars);
1596     }
1597   
1598     jstring NewStringUTF(const char *utf) {
1599         return functions->NewStringUTF(this,utf);
1600     }
1601     jsize GetStringUTFLength(jstring str) {
1602         return functions->GetStringUTFLength(this,str);
1603     }
1604     const char* GetStringUTFChars(jstring str, jboolean *isCopy) {
1605         return functions->GetStringUTFChars(this,str,isCopy);
1606     }
1607     void ReleaseStringUTFChars(jstring str, const char* chars) {
1608         functions->ReleaseStringUTFChars(this,str,chars);
1609     }
1610 
1611     jsize GetArrayLength(jarray array) {
1612         return functions->GetArrayLength(this,array);
1613     }
1614 
1615     jobjectArray NewObjectArray(jsize len, jclass clazz, 
1616                 jobject init) {
1617         return functions->NewObjectArray(this,len,clazz,init);
1618     }
1619     jobject GetObjectArrayElement(jobjectArray array, jsize index) {
1620         return functions->GetObjectArrayElement(this,array,index);
1621     }
1622     void SetObjectArrayElement(jobjectArray array, jsize index, 
1623                    jobject val) {
1624         functions->SetObjectArrayElement(this,array,index,val);
1625     }
1626 
1627     jbooleanArray NewBooleanArray(jsize len) {
1628         return functions->NewBooleanArray(this,len);
1629     }
1630     jbyteArray NewByteArray(jsize len) {
1631         return functions->NewByteArray(this,len);
1632     }
1633     jcharArray NewCharArray(jsize len) {
1634         return functions->NewCharArray(this,len);
1635     }
1636     jshortArray NewShortArray(jsize len) {
1637         return functions->NewShortArray(this,len);
1638     }
1639     jintArray NewIntArray(jsize len) {
1640         return functions->NewIntArray(this,len);
1641     }
1642     jlongArray NewLongArray(jsize len) {
1643         return functions->NewLongArray(this,len);
1644     }
1645     jfloatArray NewFloatArray(jsize len) {
1646         return functions->NewFloatArray(this,len);
1647     }
1648     jdoubleArray NewDoubleArray(jsize len) {
1649         return functions->NewDoubleArray(this,len);
1650     }
1651 
1652     jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) {
1653         return functions->GetBooleanArrayElements(this,array,isCopy);
1654     }
1655     jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) {
1656         return functions->GetByteArrayElements(this,array,isCopy);
1657     }
1658     jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) {
1659         return functions->GetCharArrayElements(this,array,isCopy);
1660     }
1661     jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) {
1662         return functions->GetShortArrayElements(this,array,isCopy);
1663     }
1664     jint * GetIntArrayElements(jintArray array, jboolean *isCopy) {
1665         return functions->GetIntArrayElements(this,array,isCopy);
1666     }
1667     jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) {
1668         return functions->GetLongArrayElements(this,array,isCopy);
1669     }
1670     jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) {
1671         return functions->GetFloatArrayElements(this,array,isCopy);
1672     }
1673     jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) {
1674         return functions->GetDoubleArrayElements(this,array,isCopy);
1675     }
1676 
1677     void ReleaseBooleanArrayElements(jbooleanArray array, 
1678                      jboolean *elems,
1679                      jint mode) {
1680         functions->ReleaseBooleanArrayElements(this,array,elems,mode);
1681     }
1682     void ReleaseByteArrayElements(jbyteArray array, 
1683                   jbyte *elems,
1684                   jint mode) {
1685         functions->ReleaseByteArrayElements(this,array,elems,mode);
1686     }
1687     void ReleaseCharArrayElements(jcharArray array, 
1688                   jchar *elems,
1689                   jint mode) {
1690         functions->ReleaseCharArrayElements(this,array,elems,mode);
1691     }
1692     void ReleaseShortArrayElements(jshortArray array, 
1693                    jshort *elems,
1694                    jint mode) {
1695         functions->ReleaseShortArrayElements(this,array,elems,mode);
1696     }
1697     void ReleaseIntArrayElements(jintArray array, 
1698                  jint *elems,
1699                  jint mode) {
1700         functions->ReleaseIntArrayElements(this,array,elems,mode);
1701     }
1702     void ReleaseLongArrayElements(jlongArray array, 
1703                   jlong *elems,
1704                   jint mode) {
1705         functions->ReleaseLongArrayElements(this,array,elems,mode);
1706     }
1707     void ReleaseFloatArrayElements(jfloatArray array, 
1708                    jfloat *elems,
1709                    jint mode) {
1710         functions->ReleaseFloatArrayElements(this,array,elems,mode);
1711     }
1712     void ReleaseDoubleArrayElements(jdoubleArray array, 
1713                     jdouble *elems,
1714                     jint mode) {
1715         functions->ReleaseDoubleArrayElements(this,array,elems,mode);
1716     }
1717 
1718     void GetBooleanArrayRegion(jbooleanArray array, 
1719                    jsize start, jsize len, jboolean *buf) {
1720         functions->GetBooleanArrayRegion(this,array,start,len,buf);
1721     }
1722     void GetByteArrayRegion(jbyteArray array, 
1723                 jsize start, jsize len, jbyte *buf) {
1724         functions->GetByteArrayRegion(this,array,start,len,buf);
1725     }
1726     void GetCharArrayRegion(jcharArray array, 
1727                 jsize start, jsize len, jchar *buf) {
1728         functions->GetCharArrayRegion(this,array,start,len,buf);
1729     }
1730     void GetShortArrayRegion(jshortArray array, 
1731                  jsize start, jsize len, jshort *buf) {
1732         functions->GetShortArrayRegion(this,array,start,len,buf);
1733     }
1734     void GetIntArrayRegion(jintArray array, 
1735                jsize start, jsize len, jint *buf) {
1736         functions->GetIntArrayRegion(this,array,start,len,buf);
1737     }
1738     void GetLongArrayRegion(jlongArray array, 
1739                 jsize start, jsize len, jlong *buf) {
1740         functions->GetLongArrayRegion(this,array,start,len,buf);
1741     }
1742     void GetFloatArrayRegion(jfloatArray array, 
1743                  jsize start, jsize len, jfloat *buf) {
1744         functions->GetFloatArrayRegion(this,array,start,len,buf);
1745     }
1746     void GetDoubleArrayRegion(jdoubleArray array, 
1747                   jsize start, jsize len, jdouble *buf) {
1748         functions->GetDoubleArrayRegion(this,array,start,len,buf);
1749     }
1750 
1751     void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len, 
1752                    jboolean *buf) {
1753         functions->SetBooleanArrayRegion(this,array,start,len,buf);
1754     }
1755     void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,
1756                 jbyte *buf) {
1757         functions->SetByteArrayRegion(this,array,start,len,buf);
1758     }
1759     void SetCharArrayRegion(jcharArray array, jsize start, jsize len, 
1760                 jchar *buf) {
1761         functions->SetCharArrayRegion(this,array,start,len,buf);
1762     }
1763     void SetShortArrayRegion(jshortArray array, jsize start, jsize len, 
1764                  jshort *buf) {
1765         functions->SetShortArrayRegion(this,array,start,len,buf);
1766     }
1767     void SetIntArrayRegion(jintArray array, jsize start, jsize len,
1768                jint *buf) {
1769         functions->SetIntArrayRegion(this,array,start,len,buf);
1770     }
1771     void SetLongArrayRegion(jlongArray array, jsize start, jsize len,
1772                 jlong *buf) {
1773         functions->SetLongArrayRegion(this,array,start,len,buf);
1774     }
1775     void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len, 
1776                  jfloat *buf) {
1777         functions->SetFloatArrayRegion(this,array,start,len,buf);
1778     }
1779     void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
1780                   jdouble *buf) {
1781         functions->SetDoubleArrayRegion(this,array,start,len,buf);
1782     }
1783 
1784     jint RegisterNatives(jclass clazz, const JNINativeMethod *methods,
1785              jint nMethods) {
1786         return functions->RegisterNatives(this,clazz,methods,nMethods);
1787     }
1788     jint UnregisterNatives(jclass clazz) {
1789         return functions->UnregisterNatives(this,clazz);
1790     }  
1791    
1792     jint MonitorEnter(jobject obj) {
1793         return functions->MonitorEnter(this,obj);
1794     }
1795     jint MonitorExit(jobject obj) {
1796         return functions->MonitorExit(this,obj);
1797     }
1798 
1799     jint GetJavaVM(JavaVM **vm) {
1800         return functions->GetJavaVM(this,vm);
1801     }
1802   
1803     void GetStringRegion(jstring str, jsize start, jsize len, jchar *buf) {
1804         functions->GetStringRegion(this,str,start,len,buf);
1805     }
1806     void GetStringUTFRegion(jstring str, jsize start, jsize len, char *buf) {
1807         functions->GetStringUTFRegion(this,str,start,len,buf);
1808     }
1809 
1810     void * GetPrimitiveArrayCritical(jarray array, jboolean *isCopy) {
1811         return functions->GetPrimitiveArrayCritical(this,array,isCopy);
1812     }
1813     void ReleasePrimitiveArrayCritical(jarray array, void *carray, jint mode) {
1814         functions->ReleasePrimitiveArrayCritical(this,array,carray,mode);
1815     }
1816 
1817     const jchar * GetStringCritical(jstring string, jboolean *isCopy) {
1818         return functions->GetStringCritical(this,string,isCopy);
1819     }
1820     void ReleaseStringCritical(jstring string, const jchar *cstring) {
1821         functions->ReleaseStringCritical(this,string,cstring);
1822     }
1823 
1824     jweak NewWeakGlobalRef(jobject obj) {
1825         return functions->NewWeakGlobalRef(this,obj);
1826     }
1827     void DeleteWeakGlobalRef(jweak ref) {
1828         functions->DeleteWeakGlobalRef(this,ref);
1829     }
1830 
1831     jboolean ExceptionCheck() {
1832     return functions->ExceptionCheck(this);
1833     }
1834 
1835     jobject NewDirectByteBuffer(void* address, jlong capacity) {
1836         return functions->NewDirectByteBuffer(this, address, capacity);
1837     }
1838     void* GetDirectBufferAddress(jobject buf) {
1839         return functions->GetDirectBufferAddress(this, buf);
1840     }
1841     jlong GetDirectBufferCapacity(jobject buf) {
1842         return functions->GetDirectBufferCapacity(this, buf);
1843     }
1844 
1845 #endif /* __cplusplus */
1846 };
1847 
1848 typedef struct JavaVMOption {
1849     char *optionString;
1850     void *extraInfo;
1851 } JavaVMOption;
1852 
1853 typedef struct JavaVMInitArgs {
1854     jint version;
1855 
1856     jint nOptions;
1857     JavaVMOption *options;
1858     jboolean ignoreUnrecognized;
1859 } JavaVMInitArgs;
1860 
1861 typedef struct JavaVMAttachArgs {
1862     jint version;
1863 
1864     char *name;
1865     jobject group;
1866 } JavaVMAttachArgs;
1867 
1868 /* These structures will be VM-specific. */
1869 
1870 typedef struct JDK1_1InitArgs {
1871     jint version;
1872 
1873     char **properties;
1874     jint checkSource; 
1875     jint nativeStackSize;
1876     jint javaStackSize;
1877     jint minHeapSize;
1878     jint maxHeapSize;
1879     jint verifyMode;
1880     char *classpath;
1881 
1882     jint (JNICALL *vfprintf)(FILE *fp, const char *format, va_list args);
1883     void (JNICALL *exit)(jint code);
1884     void (JNICALL *abort)(void);
1885     
1886     jint enableClassGC;
1887     jint enableVerboseGC;
1888     jint disableAsyncGC;
1889     jint verbose;
1890     jboolean debugging;
1891     jint debugPort;
1892 } JDK1_1InitArgs;
1893 
1894 typedef struct JDK1_1AttachArgs {
1895     void * __padding; /* C compilers don't allow empty structures. */
1896 } JDK1_1AttachArgs;
1897 
1898 #define JDK1_2
1899 #define JDK1_4
1900 
1901 /* End VM-specific. */
1902 
1903 struct JNIInvokeInterface_ {
1904     void *reserved0;
1905     void *reserved1;
1906     void *reserved2;
1907 
1908     jint (JNICALL *DestroyJavaVM)(JavaVM *vm);
1909 
1910     jint (JNICALL *AttachCurrentThread)(JavaVM *vm, void **penv, void *args);
1911 
1912     jint (JNICALL *DetachCurrentThread)(JavaVM *vm);
1913 
1914     jint (JNICALL *GetEnv)(JavaVM *vm, void **penv, jint version);
1915 
1916     jint (JNICALL *AttachCurrentThreadAsDaemon)(JavaVM *vm, void **penv, void *args);
1917 };
1918 
1919 struct JavaVM_ {
1920     const struct JNIInvokeInterface_ *functions;
1921 #ifdef __cplusplus
1922 
1923     jint DestroyJavaVM() {
1924         return functions->DestroyJavaVM(this);
1925     }
1926     jint AttachCurrentThread(void **penv, void *args) {
1927         return functions->AttachCurrentThread(this, penv, args);
1928     }
1929     jint DetachCurrentThread() {
1930         return functions->DetachCurrentThread(this);
1931     }
1932 
1933     jint GetEnv(void **penv, jint version) {
1934         return functions->GetEnv(this, penv, version);
1935     }
1936     jint AttachCurrentThreadAsDaemon(void **penv, void *args) {
1937         return functions->AttachCurrentThreadAsDaemon(this, penv, args);
1938     }
1939 #endif
1940 };
1941 
1942 #ifdef _JNI_IMPLEMENTATION_
1943 #define _JNI_IMPORT_OR_EXPORT_ JNIEXPORT
1944 #else
1945 #define _JNI_IMPORT_OR_EXPORT_ JNIIMPORT
1946 #endif
1947 _JNI_IMPORT_OR_EXPORT_ jint JNICALL
1948 JNI_GetDefaultJavaVMInitArgs(void *args);
1949 
1950 _JNI_IMPORT_OR_EXPORT_ jint JNICALL
1951 JNI_CreateJavaVM(JavaVM **pvm, void **penv, void *args);
1952 
1953 _JNI_IMPORT_OR_EXPORT_ jint JNICALL
1954 JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);
1955 
1956 /* Defined by native libraries. */
1957 JNIEXPORT jint JNICALL
1958 JNI_OnLoad(JavaVM *vm, void *reserved);
1959 
1960 JNIEXPORT void JNICALL
1961 JNI_OnUnload(JavaVM *vm, void *reserved);
1962 
1963 #define JNI_VERSION_1_1 0x00010001
1964 #define JNI_VERSION_1_2 0x00010002
1965 #define JNI_VERSION_1_4 0x00010004
1966 
1967 #ifdef __cplusplus
1968 } /* extern "C" */
1969 #endif /* __cplusplus */
1970 
1971 #endif /* JNI_H */
1972 
1973