Path: blob/master/src/java.base/share/native/include/jni.h
41149 views
/*1* Copyright (c) 1996, 2018, Oracle and/or its affiliates. All rights reserved.2* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.3*4* This code is free software; you can redistribute it and/or modify it5* under the terms of the GNU General Public License version 2 only, as6* published by the Free Software Foundation. Oracle designates this7* particular file as subject to the "Classpath" exception as provided8* by Oracle in the LICENSE file that accompanied this code.9*10* This code is distributed in the hope that it will be useful, but WITHOUT11* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or12* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License13* version 2 for more details (a copy is included in the LICENSE file that14* accompanied this code).15*16* You should have received a copy of the GNU General Public License version17* 2 along with this work; if not, write to the Free Software Foundation,18* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.19*20* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA21* or visit www.oracle.com if you need additional information or have any22* questions.23*/2425/*26* We used part of Netscape's Java Runtime Interface (JRI) as the starting27* point of our design and implementation.28*/2930/******************************************************************************31* Java Runtime Interface32* Copyright (c) 1996 Netscape Communications Corporation. All rights reserved.33*****************************************************************************/3435#ifndef _JAVASOFT_JNI_H_36#define _JAVASOFT_JNI_H_3738#include <stdio.h>39#include <stdarg.h>4041/* jni_md.h contains the machine-dependent typedefs for jbyte, jint42and jlong */4344#include "jni_md.h"4546#ifdef __cplusplus47extern "C" {48#endif4950/*51* JNI Types52*/5354#ifndef JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H5556typedef unsigned char jboolean;57typedef unsigned short jchar;58typedef short jshort;59typedef float jfloat;60typedef double jdouble;6162typedef jint jsize;6364#ifdef __cplusplus6566class _jobject {};67class _jclass : public _jobject {};68class _jthrowable : public _jobject {};69class _jstring : public _jobject {};70class _jarray : public _jobject {};71class _jbooleanArray : public _jarray {};72class _jbyteArray : public _jarray {};73class _jcharArray : public _jarray {};74class _jshortArray : public _jarray {};75class _jintArray : public _jarray {};76class _jlongArray : public _jarray {};77class _jfloatArray : public _jarray {};78class _jdoubleArray : public _jarray {};79class _jobjectArray : public _jarray {};8081typedef _jobject *jobject;82typedef _jclass *jclass;83typedef _jthrowable *jthrowable;84typedef _jstring *jstring;85typedef _jarray *jarray;86typedef _jbooleanArray *jbooleanArray;87typedef _jbyteArray *jbyteArray;88typedef _jcharArray *jcharArray;89typedef _jshortArray *jshortArray;90typedef _jintArray *jintArray;91typedef _jlongArray *jlongArray;92typedef _jfloatArray *jfloatArray;93typedef _jdoubleArray *jdoubleArray;94typedef _jobjectArray *jobjectArray;9596#else9798struct _jobject;99100typedef struct _jobject *jobject;101typedef jobject jclass;102typedef jobject jthrowable;103typedef jobject jstring;104typedef jobject jarray;105typedef jarray jbooleanArray;106typedef jarray jbyteArray;107typedef jarray jcharArray;108typedef jarray jshortArray;109typedef jarray jintArray;110typedef jarray jlongArray;111typedef jarray jfloatArray;112typedef jarray jdoubleArray;113typedef jarray jobjectArray;114115#endif116117typedef jobject jweak;118119typedef union jvalue {120jboolean z;121jbyte b;122jchar c;123jshort s;124jint i;125jlong j;126jfloat f;127jdouble d;128jobject l;129} jvalue;130131struct _jfieldID;132typedef struct _jfieldID *jfieldID;133134struct _jmethodID;135typedef struct _jmethodID *jmethodID;136137/* Return values from jobjectRefType */138typedef enum _jobjectType {139JNIInvalidRefType = 0,140JNILocalRefType = 1,141JNIGlobalRefType = 2,142JNIWeakGlobalRefType = 3143} jobjectRefType;144145146#endif /* JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H */147148/*149* jboolean constants150*/151152#define JNI_FALSE 0153#define JNI_TRUE 1154155/*156* possible return values for JNI functions.157*/158159#define JNI_OK 0 /* success */160#define JNI_ERR (-1) /* unknown error */161#define JNI_EDETACHED (-2) /* thread detached from the VM */162#define JNI_EVERSION (-3) /* JNI version error */163#define JNI_ENOMEM (-4) /* not enough memory */164#define JNI_EEXIST (-5) /* VM already created */165#define JNI_EINVAL (-6) /* invalid arguments */166167/*168* used in ReleaseScalarArrayElements169*/170171#define JNI_COMMIT 1172#define JNI_ABORT 2173174/*175* used in RegisterNatives to describe native method name, signature,176* and function pointer.177*/178179typedef struct {180char *name;181char *signature;182void *fnPtr;183} JNINativeMethod;184185/*186* JNI Native Method Interface.187*/188189struct JNINativeInterface_;190191struct JNIEnv_;192193#ifdef __cplusplus194typedef JNIEnv_ JNIEnv;195#else196typedef const struct JNINativeInterface_ *JNIEnv;197#endif198199/*200* JNI Invocation Interface.201*/202203struct JNIInvokeInterface_;204205struct JavaVM_;206207#ifdef __cplusplus208typedef JavaVM_ JavaVM;209#else210typedef const struct JNIInvokeInterface_ *JavaVM;211#endif212213struct JNINativeInterface_ {214void *reserved0;215void *reserved1;216void *reserved2;217218void *reserved3;219jint (JNICALL *GetVersion)(JNIEnv *env);220221jclass (JNICALL *DefineClass)222(JNIEnv *env, const char *name, jobject loader, const jbyte *buf,223jsize len);224jclass (JNICALL *FindClass)225(JNIEnv *env, const char *name);226227jmethodID (JNICALL *FromReflectedMethod)228(JNIEnv *env, jobject method);229jfieldID (JNICALL *FromReflectedField)230(JNIEnv *env, jobject field);231232jobject (JNICALL *ToReflectedMethod)233(JNIEnv *env, jclass cls, jmethodID methodID, jboolean isStatic);234235jclass (JNICALL *GetSuperclass)236(JNIEnv *env, jclass sub);237jboolean (JNICALL *IsAssignableFrom)238(JNIEnv *env, jclass sub, jclass sup);239240jobject (JNICALL *ToReflectedField)241(JNIEnv *env, jclass cls, jfieldID fieldID, jboolean isStatic);242243jint (JNICALL *Throw)244(JNIEnv *env, jthrowable obj);245jint (JNICALL *ThrowNew)246(JNIEnv *env, jclass clazz, const char *msg);247jthrowable (JNICALL *ExceptionOccurred)248(JNIEnv *env);249void (JNICALL *ExceptionDescribe)250(JNIEnv *env);251void (JNICALL *ExceptionClear)252(JNIEnv *env);253void (JNICALL *FatalError)254(JNIEnv *env, const char *msg);255256jint (JNICALL *PushLocalFrame)257(JNIEnv *env, jint capacity);258jobject (JNICALL *PopLocalFrame)259(JNIEnv *env, jobject result);260261jobject (JNICALL *NewGlobalRef)262(JNIEnv *env, jobject lobj);263void (JNICALL *DeleteGlobalRef)264(JNIEnv *env, jobject gref);265void (JNICALL *DeleteLocalRef)266(JNIEnv *env, jobject obj);267jboolean (JNICALL *IsSameObject)268(JNIEnv *env, jobject obj1, jobject obj2);269jobject (JNICALL *NewLocalRef)270(JNIEnv *env, jobject ref);271jint (JNICALL *EnsureLocalCapacity)272(JNIEnv *env, jint capacity);273274jobject (JNICALL *AllocObject)275(JNIEnv *env, jclass clazz);276jobject (JNICALL *NewObject)277(JNIEnv *env, jclass clazz, jmethodID methodID, ...);278jobject (JNICALL *NewObjectV)279(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);280jobject (JNICALL *NewObjectA)281(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);282283jclass (JNICALL *GetObjectClass)284(JNIEnv *env, jobject obj);285jboolean (JNICALL *IsInstanceOf)286(JNIEnv *env, jobject obj, jclass clazz);287288jmethodID (JNICALL *GetMethodID)289(JNIEnv *env, jclass clazz, const char *name, const char *sig);290291jobject (JNICALL *CallObjectMethod)292(JNIEnv *env, jobject obj, jmethodID methodID, ...);293jobject (JNICALL *CallObjectMethodV)294(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);295jobject (JNICALL *CallObjectMethodA)296(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);297298jboolean (JNICALL *CallBooleanMethod)299(JNIEnv *env, jobject obj, jmethodID methodID, ...);300jboolean (JNICALL *CallBooleanMethodV)301(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);302jboolean (JNICALL *CallBooleanMethodA)303(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);304305jbyte (JNICALL *CallByteMethod)306(JNIEnv *env, jobject obj, jmethodID methodID, ...);307jbyte (JNICALL *CallByteMethodV)308(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);309jbyte (JNICALL *CallByteMethodA)310(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);311312jchar (JNICALL *CallCharMethod)313(JNIEnv *env, jobject obj, jmethodID methodID, ...);314jchar (JNICALL *CallCharMethodV)315(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);316jchar (JNICALL *CallCharMethodA)317(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);318319jshort (JNICALL *CallShortMethod)320(JNIEnv *env, jobject obj, jmethodID methodID, ...);321jshort (JNICALL *CallShortMethodV)322(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);323jshort (JNICALL *CallShortMethodA)324(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);325326jint (JNICALL *CallIntMethod)327(JNIEnv *env, jobject obj, jmethodID methodID, ...);328jint (JNICALL *CallIntMethodV)329(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);330jint (JNICALL *CallIntMethodA)331(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);332333jlong (JNICALL *CallLongMethod)334(JNIEnv *env, jobject obj, jmethodID methodID, ...);335jlong (JNICALL *CallLongMethodV)336(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);337jlong (JNICALL *CallLongMethodA)338(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);339340jfloat (JNICALL *CallFloatMethod)341(JNIEnv *env, jobject obj, jmethodID methodID, ...);342jfloat (JNICALL *CallFloatMethodV)343(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);344jfloat (JNICALL *CallFloatMethodA)345(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);346347jdouble (JNICALL *CallDoubleMethod)348(JNIEnv *env, jobject obj, jmethodID methodID, ...);349jdouble (JNICALL *CallDoubleMethodV)350(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);351jdouble (JNICALL *CallDoubleMethodA)352(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);353354void (JNICALL *CallVoidMethod)355(JNIEnv *env, jobject obj, jmethodID methodID, ...);356void (JNICALL *CallVoidMethodV)357(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);358void (JNICALL *CallVoidMethodA)359(JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);360361jobject (JNICALL *CallNonvirtualObjectMethod)362(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);363jobject (JNICALL *CallNonvirtualObjectMethodV)364(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,365va_list args);366jobject (JNICALL *CallNonvirtualObjectMethodA)367(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,368const jvalue * args);369370jboolean (JNICALL *CallNonvirtualBooleanMethod)371(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);372jboolean (JNICALL *CallNonvirtualBooleanMethodV)373(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,374va_list args);375jboolean (JNICALL *CallNonvirtualBooleanMethodA)376(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,377const jvalue * args);378379jbyte (JNICALL *CallNonvirtualByteMethod)380(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);381jbyte (JNICALL *CallNonvirtualByteMethodV)382(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,383va_list args);384jbyte (JNICALL *CallNonvirtualByteMethodA)385(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,386const jvalue *args);387388jchar (JNICALL *CallNonvirtualCharMethod)389(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);390jchar (JNICALL *CallNonvirtualCharMethodV)391(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,392va_list args);393jchar (JNICALL *CallNonvirtualCharMethodA)394(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,395const jvalue *args);396397jshort (JNICALL *CallNonvirtualShortMethod)398(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);399jshort (JNICALL *CallNonvirtualShortMethodV)400(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,401va_list args);402jshort (JNICALL *CallNonvirtualShortMethodA)403(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,404const jvalue *args);405406jint (JNICALL *CallNonvirtualIntMethod)407(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);408jint (JNICALL *CallNonvirtualIntMethodV)409(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,410va_list args);411jint (JNICALL *CallNonvirtualIntMethodA)412(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,413const jvalue *args);414415jlong (JNICALL *CallNonvirtualLongMethod)416(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);417jlong (JNICALL *CallNonvirtualLongMethodV)418(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,419va_list args);420jlong (JNICALL *CallNonvirtualLongMethodA)421(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,422const jvalue *args);423424jfloat (JNICALL *CallNonvirtualFloatMethod)425(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);426jfloat (JNICALL *CallNonvirtualFloatMethodV)427(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,428va_list args);429jfloat (JNICALL *CallNonvirtualFloatMethodA)430(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,431const jvalue *args);432433jdouble (JNICALL *CallNonvirtualDoubleMethod)434(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);435jdouble (JNICALL *CallNonvirtualDoubleMethodV)436(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,437va_list args);438jdouble (JNICALL *CallNonvirtualDoubleMethodA)439(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,440const jvalue *args);441442void (JNICALL *CallNonvirtualVoidMethod)443(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);444void (JNICALL *CallNonvirtualVoidMethodV)445(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,446va_list args);447void (JNICALL *CallNonvirtualVoidMethodA)448(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,449const jvalue * args);450451jfieldID (JNICALL *GetFieldID)452(JNIEnv *env, jclass clazz, const char *name, const char *sig);453454jobject (JNICALL *GetObjectField)455(JNIEnv *env, jobject obj, jfieldID fieldID);456jboolean (JNICALL *GetBooleanField)457(JNIEnv *env, jobject obj, jfieldID fieldID);458jbyte (JNICALL *GetByteField)459(JNIEnv *env, jobject obj, jfieldID fieldID);460jchar (JNICALL *GetCharField)461(JNIEnv *env, jobject obj, jfieldID fieldID);462jshort (JNICALL *GetShortField)463(JNIEnv *env, jobject obj, jfieldID fieldID);464jint (JNICALL *GetIntField)465(JNIEnv *env, jobject obj, jfieldID fieldID);466jlong (JNICALL *GetLongField)467(JNIEnv *env, jobject obj, jfieldID fieldID);468jfloat (JNICALL *GetFloatField)469(JNIEnv *env, jobject obj, jfieldID fieldID);470jdouble (JNICALL *GetDoubleField)471(JNIEnv *env, jobject obj, jfieldID fieldID);472473void (JNICALL *SetObjectField)474(JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);475void (JNICALL *SetBooleanField)476(JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);477void (JNICALL *SetByteField)478(JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);479void (JNICALL *SetCharField)480(JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);481void (JNICALL *SetShortField)482(JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);483void (JNICALL *SetIntField)484(JNIEnv *env, jobject obj, jfieldID fieldID, jint val);485void (JNICALL *SetLongField)486(JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);487void (JNICALL *SetFloatField)488(JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);489void (JNICALL *SetDoubleField)490(JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);491492jmethodID (JNICALL *GetStaticMethodID)493(JNIEnv *env, jclass clazz, const char *name, const char *sig);494495jobject (JNICALL *CallStaticObjectMethod)496(JNIEnv *env, jclass clazz, jmethodID methodID, ...);497jobject (JNICALL *CallStaticObjectMethodV)498(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);499jobject (JNICALL *CallStaticObjectMethodA)500(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);501502jboolean (JNICALL *CallStaticBooleanMethod)503(JNIEnv *env, jclass clazz, jmethodID methodID, ...);504jboolean (JNICALL *CallStaticBooleanMethodV)505(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);506jboolean (JNICALL *CallStaticBooleanMethodA)507(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);508509jbyte (JNICALL *CallStaticByteMethod)510(JNIEnv *env, jclass clazz, jmethodID methodID, ...);511jbyte (JNICALL *CallStaticByteMethodV)512(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);513jbyte (JNICALL *CallStaticByteMethodA)514(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);515516jchar (JNICALL *CallStaticCharMethod)517(JNIEnv *env, jclass clazz, jmethodID methodID, ...);518jchar (JNICALL *CallStaticCharMethodV)519(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);520jchar (JNICALL *CallStaticCharMethodA)521(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);522523jshort (JNICALL *CallStaticShortMethod)524(JNIEnv *env, jclass clazz, jmethodID methodID, ...);525jshort (JNICALL *CallStaticShortMethodV)526(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);527jshort (JNICALL *CallStaticShortMethodA)528(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);529530jint (JNICALL *CallStaticIntMethod)531(JNIEnv *env, jclass clazz, jmethodID methodID, ...);532jint (JNICALL *CallStaticIntMethodV)533(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);534jint (JNICALL *CallStaticIntMethodA)535(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);536537jlong (JNICALL *CallStaticLongMethod)538(JNIEnv *env, jclass clazz, jmethodID methodID, ...);539jlong (JNICALL *CallStaticLongMethodV)540(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);541jlong (JNICALL *CallStaticLongMethodA)542(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);543544jfloat (JNICALL *CallStaticFloatMethod)545(JNIEnv *env, jclass clazz, jmethodID methodID, ...);546jfloat (JNICALL *CallStaticFloatMethodV)547(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);548jfloat (JNICALL *CallStaticFloatMethodA)549(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);550551jdouble (JNICALL *CallStaticDoubleMethod)552(JNIEnv *env, jclass clazz, jmethodID methodID, ...);553jdouble (JNICALL *CallStaticDoubleMethodV)554(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);555jdouble (JNICALL *CallStaticDoubleMethodA)556(JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);557558void (JNICALL *CallStaticVoidMethod)559(JNIEnv *env, jclass cls, jmethodID methodID, ...);560void (JNICALL *CallStaticVoidMethodV)561(JNIEnv *env, jclass cls, jmethodID methodID, va_list args);562void (JNICALL *CallStaticVoidMethodA)563(JNIEnv *env, jclass cls, jmethodID methodID, const jvalue * args);564565jfieldID (JNICALL *GetStaticFieldID)566(JNIEnv *env, jclass clazz, const char *name, const char *sig);567jobject (JNICALL *GetStaticObjectField)568(JNIEnv *env, jclass clazz, jfieldID fieldID);569jboolean (JNICALL *GetStaticBooleanField)570(JNIEnv *env, jclass clazz, jfieldID fieldID);571jbyte (JNICALL *GetStaticByteField)572(JNIEnv *env, jclass clazz, jfieldID fieldID);573jchar (JNICALL *GetStaticCharField)574(JNIEnv *env, jclass clazz, jfieldID fieldID);575jshort (JNICALL *GetStaticShortField)576(JNIEnv *env, jclass clazz, jfieldID fieldID);577jint (JNICALL *GetStaticIntField)578(JNIEnv *env, jclass clazz, jfieldID fieldID);579jlong (JNICALL *GetStaticLongField)580(JNIEnv *env, jclass clazz, jfieldID fieldID);581jfloat (JNICALL *GetStaticFloatField)582(JNIEnv *env, jclass clazz, jfieldID fieldID);583jdouble (JNICALL *GetStaticDoubleField)584(JNIEnv *env, jclass clazz, jfieldID fieldID);585586void (JNICALL *SetStaticObjectField)587(JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value);588void (JNICALL *SetStaticBooleanField)589(JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value);590void (JNICALL *SetStaticByteField)591(JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value);592void (JNICALL *SetStaticCharField)593(JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value);594void (JNICALL *SetStaticShortField)595(JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value);596void (JNICALL *SetStaticIntField)597(JNIEnv *env, jclass clazz, jfieldID fieldID, jint value);598void (JNICALL *SetStaticLongField)599(JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value);600void (JNICALL *SetStaticFloatField)601(JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value);602void (JNICALL *SetStaticDoubleField)603(JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value);604605jstring (JNICALL *NewString)606(JNIEnv *env, const jchar *unicode, jsize len);607jsize (JNICALL *GetStringLength)608(JNIEnv *env, jstring str);609const jchar *(JNICALL *GetStringChars)610(JNIEnv *env, jstring str, jboolean *isCopy);611void (JNICALL *ReleaseStringChars)612(JNIEnv *env, jstring str, const jchar *chars);613614jstring (JNICALL *NewStringUTF)615(JNIEnv *env, const char *utf);616jsize (JNICALL *GetStringUTFLength)617(JNIEnv *env, jstring str);618const char* (JNICALL *GetStringUTFChars)619(JNIEnv *env, jstring str, jboolean *isCopy);620void (JNICALL *ReleaseStringUTFChars)621(JNIEnv *env, jstring str, const char* chars);622623624jsize (JNICALL *GetArrayLength)625(JNIEnv *env, jarray array);626627jobjectArray (JNICALL *NewObjectArray)628(JNIEnv *env, jsize len, jclass clazz, jobject init);629jobject (JNICALL *GetObjectArrayElement)630(JNIEnv *env, jobjectArray array, jsize index);631void (JNICALL *SetObjectArrayElement)632(JNIEnv *env, jobjectArray array, jsize index, jobject val);633634jbooleanArray (JNICALL *NewBooleanArray)635(JNIEnv *env, jsize len);636jbyteArray (JNICALL *NewByteArray)637(JNIEnv *env, jsize len);638jcharArray (JNICALL *NewCharArray)639(JNIEnv *env, jsize len);640jshortArray (JNICALL *NewShortArray)641(JNIEnv *env, jsize len);642jintArray (JNICALL *NewIntArray)643(JNIEnv *env, jsize len);644jlongArray (JNICALL *NewLongArray)645(JNIEnv *env, jsize len);646jfloatArray (JNICALL *NewFloatArray)647(JNIEnv *env, jsize len);648jdoubleArray (JNICALL *NewDoubleArray)649(JNIEnv *env, jsize len);650651jboolean * (JNICALL *GetBooleanArrayElements)652(JNIEnv *env, jbooleanArray array, jboolean *isCopy);653jbyte * (JNICALL *GetByteArrayElements)654(JNIEnv *env, jbyteArray array, jboolean *isCopy);655jchar * (JNICALL *GetCharArrayElements)656(JNIEnv *env, jcharArray array, jboolean *isCopy);657jshort * (JNICALL *GetShortArrayElements)658(JNIEnv *env, jshortArray array, jboolean *isCopy);659jint * (JNICALL *GetIntArrayElements)660(JNIEnv *env, jintArray array, jboolean *isCopy);661jlong * (JNICALL *GetLongArrayElements)662(JNIEnv *env, jlongArray array, jboolean *isCopy);663jfloat * (JNICALL *GetFloatArrayElements)664(JNIEnv *env, jfloatArray array, jboolean *isCopy);665jdouble * (JNICALL *GetDoubleArrayElements)666(JNIEnv *env, jdoubleArray array, jboolean *isCopy);667668void (JNICALL *ReleaseBooleanArrayElements)669(JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode);670void (JNICALL *ReleaseByteArrayElements)671(JNIEnv *env, jbyteArray array, jbyte *elems, jint mode);672void (JNICALL *ReleaseCharArrayElements)673(JNIEnv *env, jcharArray array, jchar *elems, jint mode);674void (JNICALL *ReleaseShortArrayElements)675(JNIEnv *env, jshortArray array, jshort *elems, jint mode);676void (JNICALL *ReleaseIntArrayElements)677(JNIEnv *env, jintArray array, jint *elems, jint mode);678void (JNICALL *ReleaseLongArrayElements)679(JNIEnv *env, jlongArray array, jlong *elems, jint mode);680void (JNICALL *ReleaseFloatArrayElements)681(JNIEnv *env, jfloatArray array, jfloat *elems, jint mode);682void (JNICALL *ReleaseDoubleArrayElements)683(JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode);684685void (JNICALL *GetBooleanArrayRegion)686(JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);687void (JNICALL *GetByteArrayRegion)688(JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);689void (JNICALL *GetCharArrayRegion)690(JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);691void (JNICALL *GetShortArrayRegion)692(JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);693void (JNICALL *GetIntArrayRegion)694(JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);695void (JNICALL *GetLongArrayRegion)696(JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);697void (JNICALL *GetFloatArrayRegion)698(JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);699void (JNICALL *GetDoubleArrayRegion)700(JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);701702void (JNICALL *SetBooleanArrayRegion)703(JNIEnv *env, jbooleanArray array, jsize start, jsize l, const jboolean *buf);704void (JNICALL *SetByteArrayRegion)705(JNIEnv *env, jbyteArray array, jsize start, jsize len, const jbyte *buf);706void (JNICALL *SetCharArrayRegion)707(JNIEnv *env, jcharArray array, jsize start, jsize len, const jchar *buf);708void (JNICALL *SetShortArrayRegion)709(JNIEnv *env, jshortArray array, jsize start, jsize len, const jshort *buf);710void (JNICALL *SetIntArrayRegion)711(JNIEnv *env, jintArray array, jsize start, jsize len, const jint *buf);712void (JNICALL *SetLongArrayRegion)713(JNIEnv *env, jlongArray array, jsize start, jsize len, const jlong *buf);714void (JNICALL *SetFloatArrayRegion)715(JNIEnv *env, jfloatArray array, jsize start, jsize len, const jfloat *buf);716void (JNICALL *SetDoubleArrayRegion)717(JNIEnv *env, jdoubleArray array, jsize start, jsize len, const jdouble *buf);718719jint (JNICALL *RegisterNatives)720(JNIEnv *env, jclass clazz, const JNINativeMethod *methods,721jint nMethods);722jint (JNICALL *UnregisterNatives)723(JNIEnv *env, jclass clazz);724725jint (JNICALL *MonitorEnter)726(JNIEnv *env, jobject obj);727jint (JNICALL *MonitorExit)728(JNIEnv *env, jobject obj);729730jint (JNICALL *GetJavaVM)731(JNIEnv *env, JavaVM **vm);732733void (JNICALL *GetStringRegion)734(JNIEnv *env, jstring str, jsize start, jsize len, jchar *buf);735void (JNICALL *GetStringUTFRegion)736(JNIEnv *env, jstring str, jsize start, jsize len, char *buf);737738void * (JNICALL *GetPrimitiveArrayCritical)739(JNIEnv *env, jarray array, jboolean *isCopy);740void (JNICALL *ReleasePrimitiveArrayCritical)741(JNIEnv *env, jarray array, void *carray, jint mode);742743const jchar * (JNICALL *GetStringCritical)744(JNIEnv *env, jstring string, jboolean *isCopy);745void (JNICALL *ReleaseStringCritical)746(JNIEnv *env, jstring string, const jchar *cstring);747748jweak (JNICALL *NewWeakGlobalRef)749(JNIEnv *env, jobject obj);750void (JNICALL *DeleteWeakGlobalRef)751(JNIEnv *env, jweak ref);752753jboolean (JNICALL *ExceptionCheck)754(JNIEnv *env);755756jobject (JNICALL *NewDirectByteBuffer)757(JNIEnv* env, void* address, jlong capacity);758void* (JNICALL *GetDirectBufferAddress)759(JNIEnv* env, jobject buf);760jlong (JNICALL *GetDirectBufferCapacity)761(JNIEnv* env, jobject buf);762763/* New JNI 1.6 Features */764765jobjectRefType (JNICALL *GetObjectRefType)766(JNIEnv* env, jobject obj);767768/* Module Features */769770jobject (JNICALL *GetModule)771(JNIEnv* env, jclass clazz);772};773774/*775* We use inlined functions for C++ so that programmers can write:776*777* env->FindClass("java/lang/String")778*779* in C++ rather than:780*781* (*env)->FindClass(env, "java/lang/String")782*783* in C.784*/785786struct JNIEnv_ {787const struct JNINativeInterface_ *functions;788#ifdef __cplusplus789790jint GetVersion() {791return functions->GetVersion(this);792}793jclass DefineClass(const char *name, jobject loader, const jbyte *buf,794jsize len) {795return functions->DefineClass(this, name, loader, buf, len);796}797jclass FindClass(const char *name) {798return functions->FindClass(this, name);799}800jmethodID FromReflectedMethod(jobject method) {801return functions->FromReflectedMethod(this,method);802}803jfieldID FromReflectedField(jobject field) {804return functions->FromReflectedField(this,field);805}806807jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic) {808return functions->ToReflectedMethod(this, cls, methodID, isStatic);809}810811jclass GetSuperclass(jclass sub) {812return functions->GetSuperclass(this, sub);813}814jboolean IsAssignableFrom(jclass sub, jclass sup) {815return functions->IsAssignableFrom(this, sub, sup);816}817818jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic) {819return functions->ToReflectedField(this,cls,fieldID,isStatic);820}821822jint Throw(jthrowable obj) {823return functions->Throw(this, obj);824}825jint ThrowNew(jclass clazz, const char *msg) {826return functions->ThrowNew(this, clazz, msg);827}828jthrowable ExceptionOccurred() {829return functions->ExceptionOccurred(this);830}831void ExceptionDescribe() {832functions->ExceptionDescribe(this);833}834void ExceptionClear() {835functions->ExceptionClear(this);836}837void FatalError(const char *msg) {838functions->FatalError(this, msg);839}840841jint PushLocalFrame(jint capacity) {842return functions->PushLocalFrame(this,capacity);843}844jobject PopLocalFrame(jobject result) {845return functions->PopLocalFrame(this,result);846}847848jobject NewGlobalRef(jobject lobj) {849return functions->NewGlobalRef(this,lobj);850}851void DeleteGlobalRef(jobject gref) {852functions->DeleteGlobalRef(this,gref);853}854void DeleteLocalRef(jobject obj) {855functions->DeleteLocalRef(this, obj);856}857858jboolean IsSameObject(jobject obj1, jobject obj2) {859return functions->IsSameObject(this,obj1,obj2);860}861862jobject NewLocalRef(jobject ref) {863return functions->NewLocalRef(this,ref);864}865jint EnsureLocalCapacity(jint capacity) {866return functions->EnsureLocalCapacity(this,capacity);867}868869jobject AllocObject(jclass clazz) {870return functions->AllocObject(this,clazz);871}872jobject NewObject(jclass clazz, jmethodID methodID, ...) {873va_list args;874jobject result;875va_start(args, methodID);876result = functions->NewObjectV(this,clazz,methodID,args);877va_end(args);878return result;879}880jobject NewObjectV(jclass clazz, jmethodID methodID,881va_list args) {882return functions->NewObjectV(this,clazz,methodID,args);883}884jobject NewObjectA(jclass clazz, jmethodID methodID,885const jvalue *args) {886return functions->NewObjectA(this,clazz,methodID,args);887}888889jclass GetObjectClass(jobject obj) {890return functions->GetObjectClass(this,obj);891}892jboolean IsInstanceOf(jobject obj, jclass clazz) {893return functions->IsInstanceOf(this,obj,clazz);894}895896jmethodID GetMethodID(jclass clazz, const char *name,897const char *sig) {898return functions->GetMethodID(this,clazz,name,sig);899}900901jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {902va_list args;903jobject result;904va_start(args,methodID);905result = functions->CallObjectMethodV(this,obj,methodID,args);906va_end(args);907return result;908}909jobject CallObjectMethodV(jobject obj, jmethodID methodID,910va_list args) {911return functions->CallObjectMethodV(this,obj,methodID,args);912}913jobject CallObjectMethodA(jobject obj, jmethodID methodID,914const jvalue * args) {915return functions->CallObjectMethodA(this,obj,methodID,args);916}917918jboolean CallBooleanMethod(jobject obj,919jmethodID methodID, ...) {920va_list args;921jboolean result;922va_start(args,methodID);923result = functions->CallBooleanMethodV(this,obj,methodID,args);924va_end(args);925return result;926}927jboolean CallBooleanMethodV(jobject obj, jmethodID methodID,928va_list args) {929return functions->CallBooleanMethodV(this,obj,methodID,args);930}931jboolean CallBooleanMethodA(jobject obj, jmethodID methodID,932const jvalue * args) {933return functions->CallBooleanMethodA(this,obj,methodID, args);934}935936jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {937va_list args;938jbyte result;939va_start(args,methodID);940result = functions->CallByteMethodV(this,obj,methodID,args);941va_end(args);942return result;943}944jbyte CallByteMethodV(jobject obj, jmethodID methodID,945va_list args) {946return functions->CallByteMethodV(this,obj,methodID,args);947}948jbyte CallByteMethodA(jobject obj, jmethodID methodID,949const jvalue * args) {950return functions->CallByteMethodA(this,obj,methodID,args);951}952953jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {954va_list args;955jchar result;956va_start(args,methodID);957result = functions->CallCharMethodV(this,obj,methodID,args);958va_end(args);959return result;960}961jchar CallCharMethodV(jobject obj, jmethodID methodID,962va_list args) {963return functions->CallCharMethodV(this,obj,methodID,args);964}965jchar CallCharMethodA(jobject obj, jmethodID methodID,966const jvalue * args) {967return functions->CallCharMethodA(this,obj,methodID,args);968}969970jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {971va_list args;972jshort result;973va_start(args,methodID);974result = functions->CallShortMethodV(this,obj,methodID,args);975va_end(args);976return result;977}978jshort CallShortMethodV(jobject obj, jmethodID methodID,979va_list args) {980return functions->CallShortMethodV(this,obj,methodID,args);981}982jshort CallShortMethodA(jobject obj, jmethodID methodID,983const jvalue * args) {984return functions->CallShortMethodA(this,obj,methodID,args);985}986987jint CallIntMethod(jobject obj, jmethodID methodID, ...) {988va_list args;989jint result;990va_start(args,methodID);991result = functions->CallIntMethodV(this,obj,methodID,args);992va_end(args);993return result;994}995jint CallIntMethodV(jobject obj, jmethodID methodID,996va_list args) {997return functions->CallIntMethodV(this,obj,methodID,args);998}999jint CallIntMethodA(jobject obj, jmethodID methodID,1000const jvalue * args) {1001return functions->CallIntMethodA(this,obj,methodID,args);1002}10031004jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {1005va_list args;1006jlong result;1007va_start(args,methodID);1008result = functions->CallLongMethodV(this,obj,methodID,args);1009va_end(args);1010return result;1011}1012jlong CallLongMethodV(jobject obj, jmethodID methodID,1013va_list args) {1014return functions->CallLongMethodV(this,obj,methodID,args);1015}1016jlong CallLongMethodA(jobject obj, jmethodID methodID,1017const jvalue * args) {1018return functions->CallLongMethodA(this,obj,methodID,args);1019}10201021jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {1022va_list args;1023jfloat result;1024va_start(args,methodID);1025result = functions->CallFloatMethodV(this,obj,methodID,args);1026va_end(args);1027return result;1028}1029jfloat CallFloatMethodV(jobject obj, jmethodID methodID,1030va_list args) {1031return functions->CallFloatMethodV(this,obj,methodID,args);1032}1033jfloat CallFloatMethodA(jobject obj, jmethodID methodID,1034const jvalue * args) {1035return functions->CallFloatMethodA(this,obj,methodID,args);1036}10371038jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {1039va_list args;1040jdouble result;1041va_start(args,methodID);1042result = functions->CallDoubleMethodV(this,obj,methodID,args);1043va_end(args);1044return result;1045}1046jdouble CallDoubleMethodV(jobject obj, jmethodID methodID,1047va_list args) {1048return functions->CallDoubleMethodV(this,obj,methodID,args);1049}1050jdouble CallDoubleMethodA(jobject obj, jmethodID methodID,1051const jvalue * args) {1052return functions->CallDoubleMethodA(this,obj,methodID,args);1053}10541055void CallVoidMethod(jobject obj, jmethodID methodID, ...) {1056va_list args;1057va_start(args,methodID);1058functions->CallVoidMethodV(this,obj,methodID,args);1059va_end(args);1060}1061void CallVoidMethodV(jobject obj, jmethodID methodID,1062va_list args) {1063functions->CallVoidMethodV(this,obj,methodID,args);1064}1065void CallVoidMethodA(jobject obj, jmethodID methodID,1066const jvalue * args) {1067functions->CallVoidMethodA(this,obj,methodID,args);1068}10691070jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz,1071jmethodID methodID, ...) {1072va_list args;1073jobject result;1074va_start(args,methodID);1075result = functions->CallNonvirtualObjectMethodV(this,obj,clazz,1076methodID,args);1077va_end(args);1078return result;1079}1080jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz,1081jmethodID methodID, va_list args) {1082return functions->CallNonvirtualObjectMethodV(this,obj,clazz,1083methodID,args);1084}1085jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz,1086jmethodID methodID, const jvalue * args) {1087return functions->CallNonvirtualObjectMethodA(this,obj,clazz,1088methodID,args);1089}10901091jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz,1092jmethodID methodID, ...) {1093va_list args;1094jboolean result;1095va_start(args,methodID);1096result = functions->CallNonvirtualBooleanMethodV(this,obj,clazz,1097methodID,args);1098va_end(args);1099return result;1100}1101jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz,1102jmethodID methodID, va_list args) {1103return functions->CallNonvirtualBooleanMethodV(this,obj,clazz,1104methodID,args);1105}1106jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz,1107jmethodID methodID, const jvalue * args) {1108return functions->CallNonvirtualBooleanMethodA(this,obj,clazz,1109methodID, args);1110}11111112jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz,1113jmethodID methodID, ...) {1114va_list args;1115jbyte result;1116va_start(args,methodID);1117result = functions->CallNonvirtualByteMethodV(this,obj,clazz,1118methodID,args);1119va_end(args);1120return result;1121}1122jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz,1123jmethodID methodID, va_list args) {1124return functions->CallNonvirtualByteMethodV(this,obj,clazz,1125methodID,args);1126}1127jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz,1128jmethodID methodID, const jvalue * args) {1129return functions->CallNonvirtualByteMethodA(this,obj,clazz,1130methodID,args);1131}11321133jchar CallNonvirtualCharMethod(jobject obj, jclass clazz,1134jmethodID methodID, ...) {1135va_list args;1136jchar result;1137va_start(args,methodID);1138result = functions->CallNonvirtualCharMethodV(this,obj,clazz,1139methodID,args);1140va_end(args);1141return result;1142}1143jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz,1144jmethodID methodID, va_list args) {1145return functions->CallNonvirtualCharMethodV(this,obj,clazz,1146methodID,args);1147}1148jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz,1149jmethodID methodID, const jvalue * args) {1150return functions->CallNonvirtualCharMethodA(this,obj,clazz,1151methodID,args);1152}11531154jshort CallNonvirtualShortMethod(jobject obj, jclass clazz,1155jmethodID methodID, ...) {1156va_list args;1157jshort result;1158va_start(args,methodID);1159result = functions->CallNonvirtualShortMethodV(this,obj,clazz,1160methodID,args);1161va_end(args);1162return result;1163}1164jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz,1165jmethodID methodID, va_list args) {1166return functions->CallNonvirtualShortMethodV(this,obj,clazz,1167methodID,args);1168}1169jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,1170jmethodID methodID, const jvalue * args) {1171return functions->CallNonvirtualShortMethodA(this,obj,clazz,1172methodID,args);1173}11741175jint CallNonvirtualIntMethod(jobject obj, jclass clazz,1176jmethodID methodID, ...) {1177va_list args;1178jint result;1179va_start(args,methodID);1180result = functions->CallNonvirtualIntMethodV(this,obj,clazz,1181methodID,args);1182va_end(args);1183return result;1184}1185jint CallNonvirtualIntMethodV(jobject obj, jclass clazz,1186jmethodID methodID, va_list args) {1187return functions->CallNonvirtualIntMethodV(this,obj,clazz,1188methodID,args);1189}1190jint CallNonvirtualIntMethodA(jobject obj, jclass clazz,1191jmethodID methodID, const jvalue * args) {1192return functions->CallNonvirtualIntMethodA(this,obj,clazz,1193methodID,args);1194}11951196jlong CallNonvirtualLongMethod(jobject obj, jclass clazz,1197jmethodID methodID, ...) {1198va_list args;1199jlong result;1200va_start(args,methodID);1201result = functions->CallNonvirtualLongMethodV(this,obj,clazz,1202methodID,args);1203va_end(args);1204return result;1205}1206jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz,1207jmethodID methodID, va_list args) {1208return functions->CallNonvirtualLongMethodV(this,obj,clazz,1209methodID,args);1210}1211jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz,1212jmethodID methodID, const jvalue * args) {1213return functions->CallNonvirtualLongMethodA(this,obj,clazz,1214methodID,args);1215}12161217jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz,1218jmethodID methodID, ...) {1219va_list args;1220jfloat result;1221va_start(args,methodID);1222result = functions->CallNonvirtualFloatMethodV(this,obj,clazz,1223methodID,args);1224va_end(args);1225return result;1226}1227jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz,1228jmethodID methodID,1229va_list args) {1230return functions->CallNonvirtualFloatMethodV(this,obj,clazz,1231methodID,args);1232}1233jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz,1234jmethodID methodID,1235const jvalue * args) {1236return functions->CallNonvirtualFloatMethodA(this,obj,clazz,1237methodID,args);1238}12391240jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz,1241jmethodID methodID, ...) {1242va_list args;1243jdouble result;1244va_start(args,methodID);1245result = functions->CallNonvirtualDoubleMethodV(this,obj,clazz,1246methodID,args);1247va_end(args);1248return result;1249}1250jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz,1251jmethodID methodID,1252va_list args) {1253return functions->CallNonvirtualDoubleMethodV(this,obj,clazz,1254methodID,args);1255}1256jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz,1257jmethodID methodID,1258const jvalue * args) {1259return functions->CallNonvirtualDoubleMethodA(this,obj,clazz,1260methodID,args);1261}12621263void CallNonvirtualVoidMethod(jobject obj, jclass clazz,1264jmethodID methodID, ...) {1265va_list args;1266va_start(args,methodID);1267functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);1268va_end(args);1269}1270void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,1271jmethodID methodID,1272va_list args) {1273functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);1274}1275void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,1276jmethodID methodID,1277const jvalue * args) {1278functions->CallNonvirtualVoidMethodA(this,obj,clazz,methodID,args);1279}12801281jfieldID GetFieldID(jclass clazz, const char *name,1282const char *sig) {1283return functions->GetFieldID(this,clazz,name,sig);1284}12851286jobject GetObjectField(jobject obj, jfieldID fieldID) {1287return functions->GetObjectField(this,obj,fieldID);1288}1289jboolean GetBooleanField(jobject obj, jfieldID fieldID) {1290return functions->GetBooleanField(this,obj,fieldID);1291}1292jbyte GetByteField(jobject obj, jfieldID fieldID) {1293return functions->GetByteField(this,obj,fieldID);1294}1295jchar GetCharField(jobject obj, jfieldID fieldID) {1296return functions->GetCharField(this,obj,fieldID);1297}1298jshort GetShortField(jobject obj, jfieldID fieldID) {1299return functions->GetShortField(this,obj,fieldID);1300}1301jint GetIntField(jobject obj, jfieldID fieldID) {1302return functions->GetIntField(this,obj,fieldID);1303}1304jlong GetLongField(jobject obj, jfieldID fieldID) {1305return functions->GetLongField(this,obj,fieldID);1306}1307jfloat GetFloatField(jobject obj, jfieldID fieldID) {1308return functions->GetFloatField(this,obj,fieldID);1309}1310jdouble GetDoubleField(jobject obj, jfieldID fieldID) {1311return functions->GetDoubleField(this,obj,fieldID);1312}13131314void SetObjectField(jobject obj, jfieldID fieldID, jobject val) {1315functions->SetObjectField(this,obj,fieldID,val);1316}1317void SetBooleanField(jobject obj, jfieldID fieldID,1318jboolean val) {1319functions->SetBooleanField(this,obj,fieldID,val);1320}1321void SetByteField(jobject obj, jfieldID fieldID,1322jbyte val) {1323functions->SetByteField(this,obj,fieldID,val);1324}1325void SetCharField(jobject obj, jfieldID fieldID,1326jchar val) {1327functions->SetCharField(this,obj,fieldID,val);1328}1329void SetShortField(jobject obj, jfieldID fieldID,1330jshort val) {1331functions->SetShortField(this,obj,fieldID,val);1332}1333void SetIntField(jobject obj, jfieldID fieldID,1334jint val) {1335functions->SetIntField(this,obj,fieldID,val);1336}1337void SetLongField(jobject obj, jfieldID fieldID,1338jlong val) {1339functions->SetLongField(this,obj,fieldID,val);1340}1341void SetFloatField(jobject obj, jfieldID fieldID,1342jfloat val) {1343functions->SetFloatField(this,obj,fieldID,val);1344}1345void SetDoubleField(jobject obj, jfieldID fieldID,1346jdouble val) {1347functions->SetDoubleField(this,obj,fieldID,val);1348}13491350jmethodID GetStaticMethodID(jclass clazz, const char *name,1351const char *sig) {1352return functions->GetStaticMethodID(this,clazz,name,sig);1353}13541355jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID,1356...) {1357va_list args;1358jobject result;1359va_start(args,methodID);1360result = functions->CallStaticObjectMethodV(this,clazz,methodID,args);1361va_end(args);1362return result;1363}1364jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID,1365va_list args) {1366return functions->CallStaticObjectMethodV(this,clazz,methodID,args);1367}1368jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID,1369const jvalue *args) {1370return functions->CallStaticObjectMethodA(this,clazz,methodID,args);1371}13721373jboolean CallStaticBooleanMethod(jclass clazz,1374jmethodID methodID, ...) {1375va_list args;1376jboolean result;1377va_start(args,methodID);1378result = functions->CallStaticBooleanMethodV(this,clazz,methodID,args);1379va_end(args);1380return result;1381}1382jboolean CallStaticBooleanMethodV(jclass clazz,1383jmethodID methodID, va_list args) {1384return functions->CallStaticBooleanMethodV(this,clazz,methodID,args);1385}1386jboolean CallStaticBooleanMethodA(jclass clazz,1387jmethodID methodID, const jvalue *args) {1388return functions->CallStaticBooleanMethodA(this,clazz,methodID,args);1389}13901391jbyte CallStaticByteMethod(jclass clazz,1392jmethodID methodID, ...) {1393va_list args;1394jbyte result;1395va_start(args,methodID);1396result = functions->CallStaticByteMethodV(this,clazz,methodID,args);1397va_end(args);1398return result;1399}1400jbyte CallStaticByteMethodV(jclass clazz,1401jmethodID methodID, va_list args) {1402return functions->CallStaticByteMethodV(this,clazz,methodID,args);1403}1404jbyte CallStaticByteMethodA(jclass clazz,1405jmethodID methodID, const jvalue *args) {1406return functions->CallStaticByteMethodA(this,clazz,methodID,args);1407}14081409jchar CallStaticCharMethod(jclass clazz,1410jmethodID methodID, ...) {1411va_list args;1412jchar result;1413va_start(args,methodID);1414result = functions->CallStaticCharMethodV(this,clazz,methodID,args);1415va_end(args);1416return result;1417}1418jchar CallStaticCharMethodV(jclass clazz,1419jmethodID methodID, va_list args) {1420return functions->CallStaticCharMethodV(this,clazz,methodID,args);1421}1422jchar CallStaticCharMethodA(jclass clazz,1423jmethodID methodID, const jvalue *args) {1424return functions->CallStaticCharMethodA(this,clazz,methodID,args);1425}14261427jshort CallStaticShortMethod(jclass clazz,1428jmethodID methodID, ...) {1429va_list args;1430jshort result;1431va_start(args,methodID);1432result = functions->CallStaticShortMethodV(this,clazz,methodID,args);1433va_end(args);1434return result;1435}1436jshort CallStaticShortMethodV(jclass clazz,1437jmethodID methodID, va_list args) {1438return functions->CallStaticShortMethodV(this,clazz,methodID,args);1439}1440jshort CallStaticShortMethodA(jclass clazz,1441jmethodID methodID, const jvalue *args) {1442return functions->CallStaticShortMethodA(this,clazz,methodID,args);1443}14441445jint CallStaticIntMethod(jclass clazz,1446jmethodID methodID, ...) {1447va_list args;1448jint result;1449va_start(args,methodID);1450result = functions->CallStaticIntMethodV(this,clazz,methodID,args);1451va_end(args);1452return result;1453}1454jint CallStaticIntMethodV(jclass clazz,1455jmethodID methodID, va_list args) {1456return functions->CallStaticIntMethodV(this,clazz,methodID,args);1457}1458jint CallStaticIntMethodA(jclass clazz,1459jmethodID methodID, const jvalue *args) {1460return functions->CallStaticIntMethodA(this,clazz,methodID,args);1461}14621463jlong CallStaticLongMethod(jclass clazz,1464jmethodID methodID, ...) {1465va_list args;1466jlong result;1467va_start(args,methodID);1468result = functions->CallStaticLongMethodV(this,clazz,methodID,args);1469va_end(args);1470return result;1471}1472jlong CallStaticLongMethodV(jclass clazz,1473jmethodID methodID, va_list args) {1474return functions->CallStaticLongMethodV(this,clazz,methodID,args);1475}1476jlong CallStaticLongMethodA(jclass clazz,1477jmethodID methodID, const jvalue *args) {1478return functions->CallStaticLongMethodA(this,clazz,methodID,args);1479}14801481jfloat CallStaticFloatMethod(jclass clazz,1482jmethodID methodID, ...) {1483va_list args;1484jfloat result;1485va_start(args,methodID);1486result = functions->CallStaticFloatMethodV(this,clazz,methodID,args);1487va_end(args);1488return result;1489}1490jfloat CallStaticFloatMethodV(jclass clazz,1491jmethodID methodID, va_list args) {1492return functions->CallStaticFloatMethodV(this,clazz,methodID,args);1493}1494jfloat CallStaticFloatMethodA(jclass clazz,1495jmethodID methodID, const jvalue *args) {1496return functions->CallStaticFloatMethodA(this,clazz,methodID,args);1497}14981499jdouble CallStaticDoubleMethod(jclass clazz,1500jmethodID methodID, ...) {1501va_list args;1502jdouble result;1503va_start(args,methodID);1504result = functions->CallStaticDoubleMethodV(this,clazz,methodID,args);1505va_end(args);1506return result;1507}1508jdouble CallStaticDoubleMethodV(jclass clazz,1509jmethodID methodID, va_list args) {1510return functions->CallStaticDoubleMethodV(this,clazz,methodID,args);1511}1512jdouble CallStaticDoubleMethodA(jclass clazz,1513jmethodID methodID, const jvalue *args) {1514return functions->CallStaticDoubleMethodA(this,clazz,methodID,args);1515}15161517void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {1518va_list args;1519va_start(args,methodID);1520functions->CallStaticVoidMethodV(this,cls,methodID,args);1521va_end(args);1522}1523void CallStaticVoidMethodV(jclass cls, jmethodID methodID,1524va_list args) {1525functions->CallStaticVoidMethodV(this,cls,methodID,args);1526}1527void CallStaticVoidMethodA(jclass cls, jmethodID methodID,1528const jvalue * args) {1529functions->CallStaticVoidMethodA(this,cls,methodID,args);1530}15311532jfieldID GetStaticFieldID(jclass clazz, const char *name,1533const char *sig) {1534return functions->GetStaticFieldID(this,clazz,name,sig);1535}1536jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) {1537return functions->GetStaticObjectField(this,clazz,fieldID);1538}1539jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) {1540return functions->GetStaticBooleanField(this,clazz,fieldID);1541}1542jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) {1543return functions->GetStaticByteField(this,clazz,fieldID);1544}1545jchar GetStaticCharField(jclass clazz, jfieldID fieldID) {1546return functions->GetStaticCharField(this,clazz,fieldID);1547}1548jshort GetStaticShortField(jclass clazz, jfieldID fieldID) {1549return functions->GetStaticShortField(this,clazz,fieldID);1550}1551jint GetStaticIntField(jclass clazz, jfieldID fieldID) {1552return functions->GetStaticIntField(this,clazz,fieldID);1553}1554jlong GetStaticLongField(jclass clazz, jfieldID fieldID) {1555return functions->GetStaticLongField(this,clazz,fieldID);1556}1557jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) {1558return functions->GetStaticFloatField(this,clazz,fieldID);1559}1560jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) {1561return functions->GetStaticDoubleField(this,clazz,fieldID);1562}15631564void SetStaticObjectField(jclass clazz, jfieldID fieldID,1565jobject value) {1566functions->SetStaticObjectField(this,clazz,fieldID,value);1567}1568void SetStaticBooleanField(jclass clazz, jfieldID fieldID,1569jboolean value) {1570functions->SetStaticBooleanField(this,clazz,fieldID,value);1571}1572void SetStaticByteField(jclass clazz, jfieldID fieldID,1573jbyte value) {1574functions->SetStaticByteField(this,clazz,fieldID,value);1575}1576void SetStaticCharField(jclass clazz, jfieldID fieldID,1577jchar value) {1578functions->SetStaticCharField(this,clazz,fieldID,value);1579}1580void SetStaticShortField(jclass clazz, jfieldID fieldID,1581jshort value) {1582functions->SetStaticShortField(this,clazz,fieldID,value);1583}1584void SetStaticIntField(jclass clazz, jfieldID fieldID,1585jint value) {1586functions->SetStaticIntField(this,clazz,fieldID,value);1587}1588void SetStaticLongField(jclass clazz, jfieldID fieldID,1589jlong value) {1590functions->SetStaticLongField(this,clazz,fieldID,value);1591}1592void SetStaticFloatField(jclass clazz, jfieldID fieldID,1593jfloat value) {1594functions->SetStaticFloatField(this,clazz,fieldID,value);1595}1596void SetStaticDoubleField(jclass clazz, jfieldID fieldID,1597jdouble value) {1598functions->SetStaticDoubleField(this,clazz,fieldID,value);1599}16001601jstring NewString(const jchar *unicode, jsize len) {1602return functions->NewString(this,unicode,len);1603}1604jsize GetStringLength(jstring str) {1605return functions->GetStringLength(this,str);1606}1607const jchar *GetStringChars(jstring str, jboolean *isCopy) {1608return functions->GetStringChars(this,str,isCopy);1609}1610void ReleaseStringChars(jstring str, const jchar *chars) {1611functions->ReleaseStringChars(this,str,chars);1612}16131614jstring NewStringUTF(const char *utf) {1615return functions->NewStringUTF(this,utf);1616}1617jsize GetStringUTFLength(jstring str) {1618return functions->GetStringUTFLength(this,str);1619}1620const char* GetStringUTFChars(jstring str, jboolean *isCopy) {1621return functions->GetStringUTFChars(this,str,isCopy);1622}1623void ReleaseStringUTFChars(jstring str, const char* chars) {1624functions->ReleaseStringUTFChars(this,str,chars);1625}16261627jsize GetArrayLength(jarray array) {1628return functions->GetArrayLength(this,array);1629}16301631jobjectArray NewObjectArray(jsize len, jclass clazz,1632jobject init) {1633return functions->NewObjectArray(this,len,clazz,init);1634}1635jobject GetObjectArrayElement(jobjectArray array, jsize index) {1636return functions->GetObjectArrayElement(this,array,index);1637}1638void SetObjectArrayElement(jobjectArray array, jsize index,1639jobject val) {1640functions->SetObjectArrayElement(this,array,index,val);1641}16421643jbooleanArray NewBooleanArray(jsize len) {1644return functions->NewBooleanArray(this,len);1645}1646jbyteArray NewByteArray(jsize len) {1647return functions->NewByteArray(this,len);1648}1649jcharArray NewCharArray(jsize len) {1650return functions->NewCharArray(this,len);1651}1652jshortArray NewShortArray(jsize len) {1653return functions->NewShortArray(this,len);1654}1655jintArray NewIntArray(jsize len) {1656return functions->NewIntArray(this,len);1657}1658jlongArray NewLongArray(jsize len) {1659return functions->NewLongArray(this,len);1660}1661jfloatArray NewFloatArray(jsize len) {1662return functions->NewFloatArray(this,len);1663}1664jdoubleArray NewDoubleArray(jsize len) {1665return functions->NewDoubleArray(this,len);1666}16671668jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) {1669return functions->GetBooleanArrayElements(this,array,isCopy);1670}1671jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) {1672return functions->GetByteArrayElements(this,array,isCopy);1673}1674jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) {1675return functions->GetCharArrayElements(this,array,isCopy);1676}1677jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) {1678return functions->GetShortArrayElements(this,array,isCopy);1679}1680jint * GetIntArrayElements(jintArray array, jboolean *isCopy) {1681return functions->GetIntArrayElements(this,array,isCopy);1682}1683jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) {1684return functions->GetLongArrayElements(this,array,isCopy);1685}1686jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) {1687return functions->GetFloatArrayElements(this,array,isCopy);1688}1689jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) {1690return functions->GetDoubleArrayElements(this,array,isCopy);1691}16921693void ReleaseBooleanArrayElements(jbooleanArray array,1694jboolean *elems,1695jint mode) {1696functions->ReleaseBooleanArrayElements(this,array,elems,mode);1697}1698void ReleaseByteArrayElements(jbyteArray array,1699jbyte *elems,1700jint mode) {1701functions->ReleaseByteArrayElements(this,array,elems,mode);1702}1703void ReleaseCharArrayElements(jcharArray array,1704jchar *elems,1705jint mode) {1706functions->ReleaseCharArrayElements(this,array,elems,mode);1707}1708void ReleaseShortArrayElements(jshortArray array,1709jshort *elems,1710jint mode) {1711functions->ReleaseShortArrayElements(this,array,elems,mode);1712}1713void ReleaseIntArrayElements(jintArray array,1714jint *elems,1715jint mode) {1716functions->ReleaseIntArrayElements(this,array,elems,mode);1717}1718void ReleaseLongArrayElements(jlongArray array,1719jlong *elems,1720jint mode) {1721functions->ReleaseLongArrayElements(this,array,elems,mode);1722}1723void ReleaseFloatArrayElements(jfloatArray array,1724jfloat *elems,1725jint mode) {1726functions->ReleaseFloatArrayElements(this,array,elems,mode);1727}1728void ReleaseDoubleArrayElements(jdoubleArray array,1729jdouble *elems,1730jint mode) {1731functions->ReleaseDoubleArrayElements(this,array,elems,mode);1732}17331734void GetBooleanArrayRegion(jbooleanArray array,1735jsize start, jsize len, jboolean *buf) {1736functions->GetBooleanArrayRegion(this,array,start,len,buf);1737}1738void GetByteArrayRegion(jbyteArray array,1739jsize start, jsize len, jbyte *buf) {1740functions->GetByteArrayRegion(this,array,start,len,buf);1741}1742void GetCharArrayRegion(jcharArray array,1743jsize start, jsize len, jchar *buf) {1744functions->GetCharArrayRegion(this,array,start,len,buf);1745}1746void GetShortArrayRegion(jshortArray array,1747jsize start, jsize len, jshort *buf) {1748functions->GetShortArrayRegion(this,array,start,len,buf);1749}1750void GetIntArrayRegion(jintArray array,1751jsize start, jsize len, jint *buf) {1752functions->GetIntArrayRegion(this,array,start,len,buf);1753}1754void GetLongArrayRegion(jlongArray array,1755jsize start, jsize len, jlong *buf) {1756functions->GetLongArrayRegion(this,array,start,len,buf);1757}1758void GetFloatArrayRegion(jfloatArray array,1759jsize start, jsize len, jfloat *buf) {1760functions->GetFloatArrayRegion(this,array,start,len,buf);1761}1762void GetDoubleArrayRegion(jdoubleArray array,1763jsize start, jsize len, jdouble *buf) {1764functions->GetDoubleArrayRegion(this,array,start,len,buf);1765}17661767void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,1768const jboolean *buf) {1769functions->SetBooleanArrayRegion(this,array,start,len,buf);1770}1771void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,1772const jbyte *buf) {1773functions->SetByteArrayRegion(this,array,start,len,buf);1774}1775void SetCharArrayRegion(jcharArray array, jsize start, jsize len,1776const jchar *buf) {1777functions->SetCharArrayRegion(this,array,start,len,buf);1778}1779void SetShortArrayRegion(jshortArray array, jsize start, jsize len,1780const jshort *buf) {1781functions->SetShortArrayRegion(this,array,start,len,buf);1782}1783void SetIntArrayRegion(jintArray array, jsize start, jsize len,1784const jint *buf) {1785functions->SetIntArrayRegion(this,array,start,len,buf);1786}1787void SetLongArrayRegion(jlongArray array, jsize start, jsize len,1788const jlong *buf) {1789functions->SetLongArrayRegion(this,array,start,len,buf);1790}1791void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,1792const jfloat *buf) {1793functions->SetFloatArrayRegion(this,array,start,len,buf);1794}1795void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,1796const jdouble *buf) {1797functions->SetDoubleArrayRegion(this,array,start,len,buf);1798}17991800jint RegisterNatives(jclass clazz, const JNINativeMethod *methods,1801jint nMethods) {1802return functions->RegisterNatives(this,clazz,methods,nMethods);1803}1804jint UnregisterNatives(jclass clazz) {1805return functions->UnregisterNatives(this,clazz);1806}18071808jint MonitorEnter(jobject obj) {1809return functions->MonitorEnter(this,obj);1810}1811jint MonitorExit(jobject obj) {1812return functions->MonitorExit(this,obj);1813}18141815jint GetJavaVM(JavaVM **vm) {1816return functions->GetJavaVM(this,vm);1817}18181819void GetStringRegion(jstring str, jsize start, jsize len, jchar *buf) {1820functions->GetStringRegion(this,str,start,len,buf);1821}1822void GetStringUTFRegion(jstring str, jsize start, jsize len, char *buf) {1823functions->GetStringUTFRegion(this,str,start,len,buf);1824}18251826void * GetPrimitiveArrayCritical(jarray array, jboolean *isCopy) {1827return functions->GetPrimitiveArrayCritical(this,array,isCopy);1828}1829void ReleasePrimitiveArrayCritical(jarray array, void *carray, jint mode) {1830functions->ReleasePrimitiveArrayCritical(this,array,carray,mode);1831}18321833const jchar * GetStringCritical(jstring string, jboolean *isCopy) {1834return functions->GetStringCritical(this,string,isCopy);1835}1836void ReleaseStringCritical(jstring string, const jchar *cstring) {1837functions->ReleaseStringCritical(this,string,cstring);1838}18391840jweak NewWeakGlobalRef(jobject obj) {1841return functions->NewWeakGlobalRef(this,obj);1842}1843void DeleteWeakGlobalRef(jweak ref) {1844functions->DeleteWeakGlobalRef(this,ref);1845}18461847jboolean ExceptionCheck() {1848return functions->ExceptionCheck(this);1849}18501851jobject NewDirectByteBuffer(void* address, jlong capacity) {1852return functions->NewDirectByteBuffer(this, address, capacity);1853}1854void* GetDirectBufferAddress(jobject buf) {1855return functions->GetDirectBufferAddress(this, buf);1856}1857jlong GetDirectBufferCapacity(jobject buf) {1858return functions->GetDirectBufferCapacity(this, buf);1859}1860jobjectRefType GetObjectRefType(jobject obj) {1861return functions->GetObjectRefType(this, obj);1862}18631864/* Module Features */18651866jobject GetModule(jclass clazz) {1867return functions->GetModule(this, clazz);1868}18691870#endif /* __cplusplus */1871};18721873/*1874* optionString may be any option accepted by the JVM, or one of the1875* following:1876*1877* -D<name>=<value> Set a system property.1878* -verbose[:class|gc|jni] Enable verbose output, comma-separated. E.g.1879* "-verbose:class" or "-verbose:gc,class"1880* Standard names include: gc, class, and jni.1881* All nonstandard (VM-specific) names must begin1882* with "X".1883* vfprintf extraInfo is a pointer to the vfprintf hook.1884* exit extraInfo is a pointer to the exit hook.1885* abort extraInfo is a pointer to the abort hook.1886*/1887typedef struct JavaVMOption {1888char *optionString;1889void *extraInfo;1890} JavaVMOption;18911892typedef struct JavaVMInitArgs {1893jint version;18941895jint nOptions;1896JavaVMOption *options;1897jboolean ignoreUnrecognized;1898} JavaVMInitArgs;18991900typedef struct JavaVMAttachArgs {1901jint version;19021903char *name;1904jobject group;1905} JavaVMAttachArgs;19061907/* These will be VM-specific. */19081909#define JDK1_21910#define JDK1_419111912/* End VM-specific. */19131914struct JNIInvokeInterface_ {1915void *reserved0;1916void *reserved1;1917void *reserved2;19181919jint (JNICALL *DestroyJavaVM)(JavaVM *vm);19201921jint (JNICALL *AttachCurrentThread)(JavaVM *vm, void **penv, void *args);19221923jint (JNICALL *DetachCurrentThread)(JavaVM *vm);19241925jint (JNICALL *GetEnv)(JavaVM *vm, void **penv, jint version);19261927jint (JNICALL *AttachCurrentThreadAsDaemon)(JavaVM *vm, void **penv, void *args);1928};19291930struct JavaVM_ {1931const struct JNIInvokeInterface_ *functions;1932#ifdef __cplusplus19331934jint DestroyJavaVM() {1935return functions->DestroyJavaVM(this);1936}1937jint AttachCurrentThread(void **penv, void *args) {1938return functions->AttachCurrentThread(this, penv, args);1939}1940jint DetachCurrentThread() {1941return functions->DetachCurrentThread(this);1942}19431944jint GetEnv(void **penv, jint version) {1945return functions->GetEnv(this, penv, version);1946}1947jint AttachCurrentThreadAsDaemon(void **penv, void *args) {1948return functions->AttachCurrentThreadAsDaemon(this, penv, args);1949}1950#endif1951};19521953#ifdef _JNI_IMPLEMENTATION_1954#define _JNI_IMPORT_OR_EXPORT_ JNIEXPORT1955#else1956#define _JNI_IMPORT_OR_EXPORT_ JNIIMPORT1957#endif1958_JNI_IMPORT_OR_EXPORT_ jint JNICALL1959JNI_GetDefaultJavaVMInitArgs(void *args);19601961_JNI_IMPORT_OR_EXPORT_ jint JNICALL1962JNI_CreateJavaVM(JavaVM **pvm, void **penv, void *args);19631964_JNI_IMPORT_OR_EXPORT_ jint JNICALL1965JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);19661967/* Defined by native libraries. */1968JNIEXPORT jint JNICALL1969JNI_OnLoad(JavaVM *vm, void *reserved);19701971JNIEXPORT void JNICALL1972JNI_OnUnload(JavaVM *vm, void *reserved);19731974#define JNI_VERSION_1_1 0x000100011975#define JNI_VERSION_1_2 0x000100021976#define JNI_VERSION_1_4 0x000100041977#define JNI_VERSION_1_6 0x000100061978#define JNI_VERSION_1_8 0x000100081979#define JNI_VERSION_9 0x000900001980#define JNI_VERSION_10 0x000a000019811982#ifdef __cplusplus1983} /* extern "C" */1984#endif /* __cplusplus */19851986#endif /* !_JAVASOFT_JNI_H_ */198719881989