Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/share/vm/prims/jni.h
32285 views
/*1* Copyright (c) 1997, 2013, 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);767};768769/*770* We use inlined functions for C++ so that programmers can write:771*772* env->FindClass("java/lang/String")773*774* in C++ rather than:775*776* (*env)->FindClass(env, "java/lang/String")777*778* in C.779*/780781struct JNIEnv_ {782const struct JNINativeInterface_ *functions;783#ifdef __cplusplus784785jint GetVersion() {786return functions->GetVersion(this);787}788jclass DefineClass(const char *name, jobject loader, const jbyte *buf,789jsize len) {790return functions->DefineClass(this, name, loader, buf, len);791}792jclass FindClass(const char *name) {793return functions->FindClass(this, name);794}795jmethodID FromReflectedMethod(jobject method) {796return functions->FromReflectedMethod(this,method);797}798jfieldID FromReflectedField(jobject field) {799return functions->FromReflectedField(this,field);800}801802jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic) {803return functions->ToReflectedMethod(this, cls, methodID, isStatic);804}805806jclass GetSuperclass(jclass sub) {807return functions->GetSuperclass(this, sub);808}809jboolean IsAssignableFrom(jclass sub, jclass sup) {810return functions->IsAssignableFrom(this, sub, sup);811}812813jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic) {814return functions->ToReflectedField(this,cls,fieldID,isStatic);815}816817jint Throw(jthrowable obj) {818return functions->Throw(this, obj);819}820jint ThrowNew(jclass clazz, const char *msg) {821return functions->ThrowNew(this, clazz, msg);822}823jthrowable ExceptionOccurred() {824return functions->ExceptionOccurred(this);825}826void ExceptionDescribe() {827functions->ExceptionDescribe(this);828}829void ExceptionClear() {830functions->ExceptionClear(this);831}832void FatalError(const char *msg) {833functions->FatalError(this, msg);834}835836jint PushLocalFrame(jint capacity) {837return functions->PushLocalFrame(this,capacity);838}839jobject PopLocalFrame(jobject result) {840return functions->PopLocalFrame(this,result);841}842843jobject NewGlobalRef(jobject lobj) {844return functions->NewGlobalRef(this,lobj);845}846void DeleteGlobalRef(jobject gref) {847functions->DeleteGlobalRef(this,gref);848}849void DeleteLocalRef(jobject obj) {850functions->DeleteLocalRef(this, obj);851}852853jboolean IsSameObject(jobject obj1, jobject obj2) {854return functions->IsSameObject(this,obj1,obj2);855}856857jobject NewLocalRef(jobject ref) {858return functions->NewLocalRef(this,ref);859}860jint EnsureLocalCapacity(jint capacity) {861return functions->EnsureLocalCapacity(this,capacity);862}863864jobject AllocObject(jclass clazz) {865return functions->AllocObject(this,clazz);866}867jobject NewObject(jclass clazz, jmethodID methodID, ...) {868va_list args;869jobject result;870va_start(args, methodID);871result = functions->NewObjectV(this,clazz,methodID,args);872va_end(args);873return result;874}875jobject NewObjectV(jclass clazz, jmethodID methodID,876va_list args) {877return functions->NewObjectV(this,clazz,methodID,args);878}879jobject NewObjectA(jclass clazz, jmethodID methodID,880const jvalue *args) {881return functions->NewObjectA(this,clazz,methodID,args);882}883884jclass GetObjectClass(jobject obj) {885return functions->GetObjectClass(this,obj);886}887jboolean IsInstanceOf(jobject obj, jclass clazz) {888return functions->IsInstanceOf(this,obj,clazz);889}890891jmethodID GetMethodID(jclass clazz, const char *name,892const char *sig) {893return functions->GetMethodID(this,clazz,name,sig);894}895896jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {897va_list args;898jobject result;899va_start(args,methodID);900result = functions->CallObjectMethodV(this,obj,methodID,args);901va_end(args);902return result;903}904jobject CallObjectMethodV(jobject obj, jmethodID methodID,905va_list args) {906return functions->CallObjectMethodV(this,obj,methodID,args);907}908jobject CallObjectMethodA(jobject obj, jmethodID methodID,909const jvalue * args) {910return functions->CallObjectMethodA(this,obj,methodID,args);911}912913jboolean CallBooleanMethod(jobject obj,914jmethodID methodID, ...) {915va_list args;916jboolean result;917va_start(args,methodID);918result = functions->CallBooleanMethodV(this,obj,methodID,args);919va_end(args);920return result;921}922jboolean CallBooleanMethodV(jobject obj, jmethodID methodID,923va_list args) {924return functions->CallBooleanMethodV(this,obj,methodID,args);925}926jboolean CallBooleanMethodA(jobject obj, jmethodID methodID,927const jvalue * args) {928return functions->CallBooleanMethodA(this,obj,methodID, args);929}930931jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {932va_list args;933jbyte result;934va_start(args,methodID);935result = functions->CallByteMethodV(this,obj,methodID,args);936va_end(args);937return result;938}939jbyte CallByteMethodV(jobject obj, jmethodID methodID,940va_list args) {941return functions->CallByteMethodV(this,obj,methodID,args);942}943jbyte CallByteMethodA(jobject obj, jmethodID methodID,944const jvalue * args) {945return functions->CallByteMethodA(this,obj,methodID,args);946}947948jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {949va_list args;950jchar result;951va_start(args,methodID);952result = functions->CallCharMethodV(this,obj,methodID,args);953va_end(args);954return result;955}956jchar CallCharMethodV(jobject obj, jmethodID methodID,957va_list args) {958return functions->CallCharMethodV(this,obj,methodID,args);959}960jchar CallCharMethodA(jobject obj, jmethodID methodID,961const jvalue * args) {962return functions->CallCharMethodA(this,obj,methodID,args);963}964965jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {966va_list args;967jshort result;968va_start(args,methodID);969result = functions->CallShortMethodV(this,obj,methodID,args);970va_end(args);971return result;972}973jshort CallShortMethodV(jobject obj, jmethodID methodID,974va_list args) {975return functions->CallShortMethodV(this,obj,methodID,args);976}977jshort CallShortMethodA(jobject obj, jmethodID methodID,978const jvalue * args) {979return functions->CallShortMethodA(this,obj,methodID,args);980}981982jint CallIntMethod(jobject obj, jmethodID methodID, ...) {983va_list args;984jint result;985va_start(args,methodID);986result = functions->CallIntMethodV(this,obj,methodID,args);987va_end(args);988return result;989}990jint CallIntMethodV(jobject obj, jmethodID methodID,991va_list args) {992return functions->CallIntMethodV(this,obj,methodID,args);993}994jint CallIntMethodA(jobject obj, jmethodID methodID,995const jvalue * args) {996return functions->CallIntMethodA(this,obj,methodID,args);997}998999jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {1000va_list args;1001jlong result;1002va_start(args,methodID);1003result = functions->CallLongMethodV(this,obj,methodID,args);1004va_end(args);1005return result;1006}1007jlong CallLongMethodV(jobject obj, jmethodID methodID,1008va_list args) {1009return functions->CallLongMethodV(this,obj,methodID,args);1010}1011jlong CallLongMethodA(jobject obj, jmethodID methodID,1012const jvalue * args) {1013return functions->CallLongMethodA(this,obj,methodID,args);1014}10151016jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {1017va_list args;1018jfloat result;1019va_start(args,methodID);1020result = functions->CallFloatMethodV(this,obj,methodID,args);1021va_end(args);1022return result;1023}1024jfloat CallFloatMethodV(jobject obj, jmethodID methodID,1025va_list args) {1026return functions->CallFloatMethodV(this,obj,methodID,args);1027}1028jfloat CallFloatMethodA(jobject obj, jmethodID methodID,1029const jvalue * args) {1030return functions->CallFloatMethodA(this,obj,methodID,args);1031}10321033jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {1034va_list args;1035jdouble result;1036va_start(args,methodID);1037result = functions->CallDoubleMethodV(this,obj,methodID,args);1038va_end(args);1039return result;1040}1041jdouble CallDoubleMethodV(jobject obj, jmethodID methodID,1042va_list args) {1043return functions->CallDoubleMethodV(this,obj,methodID,args);1044}1045jdouble CallDoubleMethodA(jobject obj, jmethodID methodID,1046const jvalue * args) {1047return functions->CallDoubleMethodA(this,obj,methodID,args);1048}10491050void CallVoidMethod(jobject obj, jmethodID methodID, ...) {1051va_list args;1052va_start(args,methodID);1053functions->CallVoidMethodV(this,obj,methodID,args);1054va_end(args);1055}1056void CallVoidMethodV(jobject obj, jmethodID methodID,1057va_list args) {1058functions->CallVoidMethodV(this,obj,methodID,args);1059}1060void CallVoidMethodA(jobject obj, jmethodID methodID,1061const jvalue * args) {1062functions->CallVoidMethodA(this,obj,methodID,args);1063}10641065jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz,1066jmethodID methodID, ...) {1067va_list args;1068jobject result;1069va_start(args,methodID);1070result = functions->CallNonvirtualObjectMethodV(this,obj,clazz,1071methodID,args);1072va_end(args);1073return result;1074}1075jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz,1076jmethodID methodID, va_list args) {1077return functions->CallNonvirtualObjectMethodV(this,obj,clazz,1078methodID,args);1079}1080jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz,1081jmethodID methodID, const jvalue * args) {1082return functions->CallNonvirtualObjectMethodA(this,obj,clazz,1083methodID,args);1084}10851086jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz,1087jmethodID methodID, ...) {1088va_list args;1089jboolean result;1090va_start(args,methodID);1091result = functions->CallNonvirtualBooleanMethodV(this,obj,clazz,1092methodID,args);1093va_end(args);1094return result;1095}1096jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz,1097jmethodID methodID, va_list args) {1098return functions->CallNonvirtualBooleanMethodV(this,obj,clazz,1099methodID,args);1100}1101jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz,1102jmethodID methodID, const jvalue * args) {1103return functions->CallNonvirtualBooleanMethodA(this,obj,clazz,1104methodID, args);1105}11061107jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz,1108jmethodID methodID, ...) {1109va_list args;1110jbyte result;1111va_start(args,methodID);1112result = functions->CallNonvirtualByteMethodV(this,obj,clazz,1113methodID,args);1114va_end(args);1115return result;1116}1117jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz,1118jmethodID methodID, va_list args) {1119return functions->CallNonvirtualByteMethodV(this,obj,clazz,1120methodID,args);1121}1122jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz,1123jmethodID methodID, const jvalue * args) {1124return functions->CallNonvirtualByteMethodA(this,obj,clazz,1125methodID,args);1126}11271128jchar CallNonvirtualCharMethod(jobject obj, jclass clazz,1129jmethodID methodID, ...) {1130va_list args;1131jchar result;1132va_start(args,methodID);1133result = functions->CallNonvirtualCharMethodV(this,obj,clazz,1134methodID,args);1135va_end(args);1136return result;1137}1138jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz,1139jmethodID methodID, va_list args) {1140return functions->CallNonvirtualCharMethodV(this,obj,clazz,1141methodID,args);1142}1143jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz,1144jmethodID methodID, const jvalue * args) {1145return functions->CallNonvirtualCharMethodA(this,obj,clazz,1146methodID,args);1147}11481149jshort CallNonvirtualShortMethod(jobject obj, jclass clazz,1150jmethodID methodID, ...) {1151va_list args;1152jshort result;1153va_start(args,methodID);1154result = functions->CallNonvirtualShortMethodV(this,obj,clazz,1155methodID,args);1156va_end(args);1157return result;1158}1159jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz,1160jmethodID methodID, va_list args) {1161return functions->CallNonvirtualShortMethodV(this,obj,clazz,1162methodID,args);1163}1164jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,1165jmethodID methodID, const jvalue * args) {1166return functions->CallNonvirtualShortMethodA(this,obj,clazz,1167methodID,args);1168}11691170jint CallNonvirtualIntMethod(jobject obj, jclass clazz,1171jmethodID methodID, ...) {1172va_list args;1173jint result;1174va_start(args,methodID);1175result = functions->CallNonvirtualIntMethodV(this,obj,clazz,1176methodID,args);1177va_end(args);1178return result;1179}1180jint CallNonvirtualIntMethodV(jobject obj, jclass clazz,1181jmethodID methodID, va_list args) {1182return functions->CallNonvirtualIntMethodV(this,obj,clazz,1183methodID,args);1184}1185jint CallNonvirtualIntMethodA(jobject obj, jclass clazz,1186jmethodID methodID, const jvalue * args) {1187return functions->CallNonvirtualIntMethodA(this,obj,clazz,1188methodID,args);1189}11901191jlong CallNonvirtualLongMethod(jobject obj, jclass clazz,1192jmethodID methodID, ...) {1193va_list args;1194jlong result;1195va_start(args,methodID);1196result = functions->CallNonvirtualLongMethodV(this,obj,clazz,1197methodID,args);1198va_end(args);1199return result;1200}1201jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz,1202jmethodID methodID, va_list args) {1203return functions->CallNonvirtualLongMethodV(this,obj,clazz,1204methodID,args);1205}1206jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz,1207jmethodID methodID, const jvalue * args) {1208return functions->CallNonvirtualLongMethodA(this,obj,clazz,1209methodID,args);1210}12111212jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz,1213jmethodID methodID, ...) {1214va_list args;1215jfloat result;1216va_start(args,methodID);1217result = functions->CallNonvirtualFloatMethodV(this,obj,clazz,1218methodID,args);1219va_end(args);1220return result;1221}1222jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz,1223jmethodID methodID,1224va_list args) {1225return functions->CallNonvirtualFloatMethodV(this,obj,clazz,1226methodID,args);1227}1228jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz,1229jmethodID methodID,1230const jvalue * args) {1231return functions->CallNonvirtualFloatMethodA(this,obj,clazz,1232methodID,args);1233}12341235jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz,1236jmethodID methodID, ...) {1237va_list args;1238jdouble result;1239va_start(args,methodID);1240result = functions->CallNonvirtualDoubleMethodV(this,obj,clazz,1241methodID,args);1242va_end(args);1243return result;1244}1245jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz,1246jmethodID methodID,1247va_list args) {1248return functions->CallNonvirtualDoubleMethodV(this,obj,clazz,1249methodID,args);1250}1251jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz,1252jmethodID methodID,1253const jvalue * args) {1254return functions->CallNonvirtualDoubleMethodA(this,obj,clazz,1255methodID,args);1256}12571258void CallNonvirtualVoidMethod(jobject obj, jclass clazz,1259jmethodID methodID, ...) {1260va_list args;1261va_start(args,methodID);1262functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);1263va_end(args);1264}1265void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,1266jmethodID methodID,1267va_list args) {1268functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);1269}1270void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,1271jmethodID methodID,1272const jvalue * args) {1273functions->CallNonvirtualVoidMethodA(this,obj,clazz,methodID,args);1274}12751276jfieldID GetFieldID(jclass clazz, const char *name,1277const char *sig) {1278return functions->GetFieldID(this,clazz,name,sig);1279}12801281jobject GetObjectField(jobject obj, jfieldID fieldID) {1282return functions->GetObjectField(this,obj,fieldID);1283}1284jboolean GetBooleanField(jobject obj, jfieldID fieldID) {1285return functions->GetBooleanField(this,obj,fieldID);1286}1287jbyte GetByteField(jobject obj, jfieldID fieldID) {1288return functions->GetByteField(this,obj,fieldID);1289}1290jchar GetCharField(jobject obj, jfieldID fieldID) {1291return functions->GetCharField(this,obj,fieldID);1292}1293jshort GetShortField(jobject obj, jfieldID fieldID) {1294return functions->GetShortField(this,obj,fieldID);1295}1296jint GetIntField(jobject obj, jfieldID fieldID) {1297return functions->GetIntField(this,obj,fieldID);1298}1299jlong GetLongField(jobject obj, jfieldID fieldID) {1300return functions->GetLongField(this,obj,fieldID);1301}1302jfloat GetFloatField(jobject obj, jfieldID fieldID) {1303return functions->GetFloatField(this,obj,fieldID);1304}1305jdouble GetDoubleField(jobject obj, jfieldID fieldID) {1306return functions->GetDoubleField(this,obj,fieldID);1307}13081309void SetObjectField(jobject obj, jfieldID fieldID, jobject val) {1310functions->SetObjectField(this,obj,fieldID,val);1311}1312void SetBooleanField(jobject obj, jfieldID fieldID,1313jboolean val) {1314functions->SetBooleanField(this,obj,fieldID,val);1315}1316void SetByteField(jobject obj, jfieldID fieldID,1317jbyte val) {1318functions->SetByteField(this,obj,fieldID,val);1319}1320void SetCharField(jobject obj, jfieldID fieldID,1321jchar val) {1322functions->SetCharField(this,obj,fieldID,val);1323}1324void SetShortField(jobject obj, jfieldID fieldID,1325jshort val) {1326functions->SetShortField(this,obj,fieldID,val);1327}1328void SetIntField(jobject obj, jfieldID fieldID,1329jint val) {1330functions->SetIntField(this,obj,fieldID,val);1331}1332void SetLongField(jobject obj, jfieldID fieldID,1333jlong val) {1334functions->SetLongField(this,obj,fieldID,val);1335}1336void SetFloatField(jobject obj, jfieldID fieldID,1337jfloat val) {1338functions->SetFloatField(this,obj,fieldID,val);1339}1340void SetDoubleField(jobject obj, jfieldID fieldID,1341jdouble val) {1342functions->SetDoubleField(this,obj,fieldID,val);1343}13441345jmethodID GetStaticMethodID(jclass clazz, const char *name,1346const char *sig) {1347return functions->GetStaticMethodID(this,clazz,name,sig);1348}13491350jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID,1351...) {1352va_list args;1353jobject result;1354va_start(args,methodID);1355result = functions->CallStaticObjectMethodV(this,clazz,methodID,args);1356va_end(args);1357return result;1358}1359jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID,1360va_list args) {1361return functions->CallStaticObjectMethodV(this,clazz,methodID,args);1362}1363jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID,1364const jvalue *args) {1365return functions->CallStaticObjectMethodA(this,clazz,methodID,args);1366}13671368jboolean CallStaticBooleanMethod(jclass clazz,1369jmethodID methodID, ...) {1370va_list args;1371jboolean result;1372va_start(args,methodID);1373result = functions->CallStaticBooleanMethodV(this,clazz,methodID,args);1374va_end(args);1375return result;1376}1377jboolean CallStaticBooleanMethodV(jclass clazz,1378jmethodID methodID, va_list args) {1379return functions->CallStaticBooleanMethodV(this,clazz,methodID,args);1380}1381jboolean CallStaticBooleanMethodA(jclass clazz,1382jmethodID methodID, const jvalue *args) {1383return functions->CallStaticBooleanMethodA(this,clazz,methodID,args);1384}13851386jbyte CallStaticByteMethod(jclass clazz,1387jmethodID methodID, ...) {1388va_list args;1389jbyte result;1390va_start(args,methodID);1391result = functions->CallStaticByteMethodV(this,clazz,methodID,args);1392va_end(args);1393return result;1394}1395jbyte CallStaticByteMethodV(jclass clazz,1396jmethodID methodID, va_list args) {1397return functions->CallStaticByteMethodV(this,clazz,methodID,args);1398}1399jbyte CallStaticByteMethodA(jclass clazz,1400jmethodID methodID, const jvalue *args) {1401return functions->CallStaticByteMethodA(this,clazz,methodID,args);1402}14031404jchar CallStaticCharMethod(jclass clazz,1405jmethodID methodID, ...) {1406va_list args;1407jchar result;1408va_start(args,methodID);1409result = functions->CallStaticCharMethodV(this,clazz,methodID,args);1410va_end(args);1411return result;1412}1413jchar CallStaticCharMethodV(jclass clazz,1414jmethodID methodID, va_list args) {1415return functions->CallStaticCharMethodV(this,clazz,methodID,args);1416}1417jchar CallStaticCharMethodA(jclass clazz,1418jmethodID methodID, const jvalue *args) {1419return functions->CallStaticCharMethodA(this,clazz,methodID,args);1420}14211422jshort CallStaticShortMethod(jclass clazz,1423jmethodID methodID, ...) {1424va_list args;1425jshort result;1426va_start(args,methodID);1427result = functions->CallStaticShortMethodV(this,clazz,methodID,args);1428va_end(args);1429return result;1430}1431jshort CallStaticShortMethodV(jclass clazz,1432jmethodID methodID, va_list args) {1433return functions->CallStaticShortMethodV(this,clazz,methodID,args);1434}1435jshort CallStaticShortMethodA(jclass clazz,1436jmethodID methodID, const jvalue *args) {1437return functions->CallStaticShortMethodA(this,clazz,methodID,args);1438}14391440jint CallStaticIntMethod(jclass clazz,1441jmethodID methodID, ...) {1442va_list args;1443jint result;1444va_start(args,methodID);1445result = functions->CallStaticIntMethodV(this,clazz,methodID,args);1446va_end(args);1447return result;1448}1449jint CallStaticIntMethodV(jclass clazz,1450jmethodID methodID, va_list args) {1451return functions->CallStaticIntMethodV(this,clazz,methodID,args);1452}1453jint CallStaticIntMethodA(jclass clazz,1454jmethodID methodID, const jvalue *args) {1455return functions->CallStaticIntMethodA(this,clazz,methodID,args);1456}14571458jlong CallStaticLongMethod(jclass clazz,1459jmethodID methodID, ...) {1460va_list args;1461jlong result;1462va_start(args,methodID);1463result = functions->CallStaticLongMethodV(this,clazz,methodID,args);1464va_end(args);1465return result;1466}1467jlong CallStaticLongMethodV(jclass clazz,1468jmethodID methodID, va_list args) {1469return functions->CallStaticLongMethodV(this,clazz,methodID,args);1470}1471jlong CallStaticLongMethodA(jclass clazz,1472jmethodID methodID, const jvalue *args) {1473return functions->CallStaticLongMethodA(this,clazz,methodID,args);1474}14751476jfloat CallStaticFloatMethod(jclass clazz,1477jmethodID methodID, ...) {1478va_list args;1479jfloat result;1480va_start(args,methodID);1481result = functions->CallStaticFloatMethodV(this,clazz,methodID,args);1482va_end(args);1483return result;1484}1485jfloat CallStaticFloatMethodV(jclass clazz,1486jmethodID methodID, va_list args) {1487return functions->CallStaticFloatMethodV(this,clazz,methodID,args);1488}1489jfloat CallStaticFloatMethodA(jclass clazz,1490jmethodID methodID, const jvalue *args) {1491return functions->CallStaticFloatMethodA(this,clazz,methodID,args);1492}14931494jdouble CallStaticDoubleMethod(jclass clazz,1495jmethodID methodID, ...) {1496va_list args;1497jdouble result;1498va_start(args,methodID);1499result = functions->CallStaticDoubleMethodV(this,clazz,methodID,args);1500va_end(args);1501return result;1502}1503jdouble CallStaticDoubleMethodV(jclass clazz,1504jmethodID methodID, va_list args) {1505return functions->CallStaticDoubleMethodV(this,clazz,methodID,args);1506}1507jdouble CallStaticDoubleMethodA(jclass clazz,1508jmethodID methodID, const jvalue *args) {1509return functions->CallStaticDoubleMethodA(this,clazz,methodID,args);1510}15111512void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {1513va_list args;1514va_start(args,methodID);1515functions->CallStaticVoidMethodV(this,cls,methodID,args);1516va_end(args);1517}1518void CallStaticVoidMethodV(jclass cls, jmethodID methodID,1519va_list args) {1520functions->CallStaticVoidMethodV(this,cls,methodID,args);1521}1522void CallStaticVoidMethodA(jclass cls, jmethodID methodID,1523const jvalue * args) {1524functions->CallStaticVoidMethodA(this,cls,methodID,args);1525}15261527jfieldID GetStaticFieldID(jclass clazz, const char *name,1528const char *sig) {1529return functions->GetStaticFieldID(this,clazz,name,sig);1530}1531jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) {1532return functions->GetStaticObjectField(this,clazz,fieldID);1533}1534jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) {1535return functions->GetStaticBooleanField(this,clazz,fieldID);1536}1537jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) {1538return functions->GetStaticByteField(this,clazz,fieldID);1539}1540jchar GetStaticCharField(jclass clazz, jfieldID fieldID) {1541return functions->GetStaticCharField(this,clazz,fieldID);1542}1543jshort GetStaticShortField(jclass clazz, jfieldID fieldID) {1544return functions->GetStaticShortField(this,clazz,fieldID);1545}1546jint GetStaticIntField(jclass clazz, jfieldID fieldID) {1547return functions->GetStaticIntField(this,clazz,fieldID);1548}1549jlong GetStaticLongField(jclass clazz, jfieldID fieldID) {1550return functions->GetStaticLongField(this,clazz,fieldID);1551}1552jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) {1553return functions->GetStaticFloatField(this,clazz,fieldID);1554}1555jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) {1556return functions->GetStaticDoubleField(this,clazz,fieldID);1557}15581559void SetStaticObjectField(jclass clazz, jfieldID fieldID,1560jobject value) {1561functions->SetStaticObjectField(this,clazz,fieldID,value);1562}1563void SetStaticBooleanField(jclass clazz, jfieldID fieldID,1564jboolean value) {1565functions->SetStaticBooleanField(this,clazz,fieldID,value);1566}1567void SetStaticByteField(jclass clazz, jfieldID fieldID,1568jbyte value) {1569functions->SetStaticByteField(this,clazz,fieldID,value);1570}1571void SetStaticCharField(jclass clazz, jfieldID fieldID,1572jchar value) {1573functions->SetStaticCharField(this,clazz,fieldID,value);1574}1575void SetStaticShortField(jclass clazz, jfieldID fieldID,1576jshort value) {1577functions->SetStaticShortField(this,clazz,fieldID,value);1578}1579void SetStaticIntField(jclass clazz, jfieldID fieldID,1580jint value) {1581functions->SetStaticIntField(this,clazz,fieldID,value);1582}1583void SetStaticLongField(jclass clazz, jfieldID fieldID,1584jlong value) {1585functions->SetStaticLongField(this,clazz,fieldID,value);1586}1587void SetStaticFloatField(jclass clazz, jfieldID fieldID,1588jfloat value) {1589functions->SetStaticFloatField(this,clazz,fieldID,value);1590}1591void SetStaticDoubleField(jclass clazz, jfieldID fieldID,1592jdouble value) {1593functions->SetStaticDoubleField(this,clazz,fieldID,value);1594}15951596jstring NewString(const jchar *unicode, jsize len) {1597return functions->NewString(this,unicode,len);1598}1599jsize GetStringLength(jstring str) {1600return functions->GetStringLength(this,str);1601}1602const jchar *GetStringChars(jstring str, jboolean *isCopy) {1603return functions->GetStringChars(this,str,isCopy);1604}1605void ReleaseStringChars(jstring str, const jchar *chars) {1606functions->ReleaseStringChars(this,str,chars);1607}16081609jstring NewStringUTF(const char *utf) {1610return functions->NewStringUTF(this,utf);1611}1612jsize GetStringUTFLength(jstring str) {1613return functions->GetStringUTFLength(this,str);1614}1615const char* GetStringUTFChars(jstring str, jboolean *isCopy) {1616return functions->GetStringUTFChars(this,str,isCopy);1617}1618void ReleaseStringUTFChars(jstring str, const char* chars) {1619functions->ReleaseStringUTFChars(this,str,chars);1620}16211622jsize GetArrayLength(jarray array) {1623return functions->GetArrayLength(this,array);1624}16251626jobjectArray NewObjectArray(jsize len, jclass clazz,1627jobject init) {1628return functions->NewObjectArray(this,len,clazz,init);1629}1630jobject GetObjectArrayElement(jobjectArray array, jsize index) {1631return functions->GetObjectArrayElement(this,array,index);1632}1633void SetObjectArrayElement(jobjectArray array, jsize index,1634jobject val) {1635functions->SetObjectArrayElement(this,array,index,val);1636}16371638jbooleanArray NewBooleanArray(jsize len) {1639return functions->NewBooleanArray(this,len);1640}1641jbyteArray NewByteArray(jsize len) {1642return functions->NewByteArray(this,len);1643}1644jcharArray NewCharArray(jsize len) {1645return functions->NewCharArray(this,len);1646}1647jshortArray NewShortArray(jsize len) {1648return functions->NewShortArray(this,len);1649}1650jintArray NewIntArray(jsize len) {1651return functions->NewIntArray(this,len);1652}1653jlongArray NewLongArray(jsize len) {1654return functions->NewLongArray(this,len);1655}1656jfloatArray NewFloatArray(jsize len) {1657return functions->NewFloatArray(this,len);1658}1659jdoubleArray NewDoubleArray(jsize len) {1660return functions->NewDoubleArray(this,len);1661}16621663jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) {1664return functions->GetBooleanArrayElements(this,array,isCopy);1665}1666jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) {1667return functions->GetByteArrayElements(this,array,isCopy);1668}1669jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) {1670return functions->GetCharArrayElements(this,array,isCopy);1671}1672jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) {1673return functions->GetShortArrayElements(this,array,isCopy);1674}1675jint * GetIntArrayElements(jintArray array, jboolean *isCopy) {1676return functions->GetIntArrayElements(this,array,isCopy);1677}1678jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) {1679return functions->GetLongArrayElements(this,array,isCopy);1680}1681jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) {1682return functions->GetFloatArrayElements(this,array,isCopy);1683}1684jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) {1685return functions->GetDoubleArrayElements(this,array,isCopy);1686}16871688void ReleaseBooleanArrayElements(jbooleanArray array,1689jboolean *elems,1690jint mode) {1691functions->ReleaseBooleanArrayElements(this,array,elems,mode);1692}1693void ReleaseByteArrayElements(jbyteArray array,1694jbyte *elems,1695jint mode) {1696functions->ReleaseByteArrayElements(this,array,elems,mode);1697}1698void ReleaseCharArrayElements(jcharArray array,1699jchar *elems,1700jint mode) {1701functions->ReleaseCharArrayElements(this,array,elems,mode);1702}1703void ReleaseShortArrayElements(jshortArray array,1704jshort *elems,1705jint mode) {1706functions->ReleaseShortArrayElements(this,array,elems,mode);1707}1708void ReleaseIntArrayElements(jintArray array,1709jint *elems,1710jint mode) {1711functions->ReleaseIntArrayElements(this,array,elems,mode);1712}1713void ReleaseLongArrayElements(jlongArray array,1714jlong *elems,1715jint mode) {1716functions->ReleaseLongArrayElements(this,array,elems,mode);1717}1718void ReleaseFloatArrayElements(jfloatArray array,1719jfloat *elems,1720jint mode) {1721functions->ReleaseFloatArrayElements(this,array,elems,mode);1722}1723void ReleaseDoubleArrayElements(jdoubleArray array,1724jdouble *elems,1725jint mode) {1726functions->ReleaseDoubleArrayElements(this,array,elems,mode);1727}17281729void GetBooleanArrayRegion(jbooleanArray array,1730jsize start, jsize len, jboolean *buf) {1731functions->GetBooleanArrayRegion(this,array,start,len,buf);1732}1733void GetByteArrayRegion(jbyteArray array,1734jsize start, jsize len, jbyte *buf) {1735functions->GetByteArrayRegion(this,array,start,len,buf);1736}1737void GetCharArrayRegion(jcharArray array,1738jsize start, jsize len, jchar *buf) {1739functions->GetCharArrayRegion(this,array,start,len,buf);1740}1741void GetShortArrayRegion(jshortArray array,1742jsize start, jsize len, jshort *buf) {1743functions->GetShortArrayRegion(this,array,start,len,buf);1744}1745void GetIntArrayRegion(jintArray array,1746jsize start, jsize len, jint *buf) {1747functions->GetIntArrayRegion(this,array,start,len,buf);1748}1749void GetLongArrayRegion(jlongArray array,1750jsize start, jsize len, jlong *buf) {1751functions->GetLongArrayRegion(this,array,start,len,buf);1752}1753void GetFloatArrayRegion(jfloatArray array,1754jsize start, jsize len, jfloat *buf) {1755functions->GetFloatArrayRegion(this,array,start,len,buf);1756}1757void GetDoubleArrayRegion(jdoubleArray array,1758jsize start, jsize len, jdouble *buf) {1759functions->GetDoubleArrayRegion(this,array,start,len,buf);1760}17611762void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,1763const jboolean *buf) {1764functions->SetBooleanArrayRegion(this,array,start,len,buf);1765}1766void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,1767const jbyte *buf) {1768functions->SetByteArrayRegion(this,array,start,len,buf);1769}1770void SetCharArrayRegion(jcharArray array, jsize start, jsize len,1771const jchar *buf) {1772functions->SetCharArrayRegion(this,array,start,len,buf);1773}1774void SetShortArrayRegion(jshortArray array, jsize start, jsize len,1775const jshort *buf) {1776functions->SetShortArrayRegion(this,array,start,len,buf);1777}1778void SetIntArrayRegion(jintArray array, jsize start, jsize len,1779const jint *buf) {1780functions->SetIntArrayRegion(this,array,start,len,buf);1781}1782void SetLongArrayRegion(jlongArray array, jsize start, jsize len,1783const jlong *buf) {1784functions->SetLongArrayRegion(this,array,start,len,buf);1785}1786void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,1787const jfloat *buf) {1788functions->SetFloatArrayRegion(this,array,start,len,buf);1789}1790void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,1791const jdouble *buf) {1792functions->SetDoubleArrayRegion(this,array,start,len,buf);1793}17941795jint RegisterNatives(jclass clazz, const JNINativeMethod *methods,1796jint nMethods) {1797return functions->RegisterNatives(this,clazz,methods,nMethods);1798}1799jint UnregisterNatives(jclass clazz) {1800return functions->UnregisterNatives(this,clazz);1801}18021803jint MonitorEnter(jobject obj) {1804return functions->MonitorEnter(this,obj);1805}1806jint MonitorExit(jobject obj) {1807return functions->MonitorExit(this,obj);1808}18091810jint GetJavaVM(JavaVM **vm) {1811return functions->GetJavaVM(this,vm);1812}18131814void GetStringRegion(jstring str, jsize start, jsize len, jchar *buf) {1815functions->GetStringRegion(this,str,start,len,buf);1816}1817void GetStringUTFRegion(jstring str, jsize start, jsize len, char *buf) {1818functions->GetStringUTFRegion(this,str,start,len,buf);1819}18201821void * GetPrimitiveArrayCritical(jarray array, jboolean *isCopy) {1822return functions->GetPrimitiveArrayCritical(this,array,isCopy);1823}1824void ReleasePrimitiveArrayCritical(jarray array, void *carray, jint mode) {1825functions->ReleasePrimitiveArrayCritical(this,array,carray,mode);1826}18271828const jchar * GetStringCritical(jstring string, jboolean *isCopy) {1829return functions->GetStringCritical(this,string,isCopy);1830}1831void ReleaseStringCritical(jstring string, const jchar *cstring) {1832functions->ReleaseStringCritical(this,string,cstring);1833}18341835jweak NewWeakGlobalRef(jobject obj) {1836return functions->NewWeakGlobalRef(this,obj);1837}1838void DeleteWeakGlobalRef(jweak ref) {1839functions->DeleteWeakGlobalRef(this,ref);1840}18411842jboolean ExceptionCheck() {1843return functions->ExceptionCheck(this);1844}18451846jobject NewDirectByteBuffer(void* address, jlong capacity) {1847return functions->NewDirectByteBuffer(this, address, capacity);1848}1849void* GetDirectBufferAddress(jobject buf) {1850return functions->GetDirectBufferAddress(this, buf);1851}1852jlong GetDirectBufferCapacity(jobject buf) {1853return functions->GetDirectBufferCapacity(this, buf);1854}1855jobjectRefType GetObjectRefType(jobject obj) {1856return functions->GetObjectRefType(this, obj);1857}18581859#endif /* __cplusplus */1860};18611862typedef struct JavaVMOption {1863char *optionString;1864void *extraInfo;1865} JavaVMOption;18661867typedef struct JavaVMInitArgs {1868jint version;18691870jint nOptions;1871JavaVMOption *options;1872jboolean ignoreUnrecognized;1873} JavaVMInitArgs;18741875typedef struct JavaVMAttachArgs {1876jint version;18771878char *name;1879jobject group;1880} JavaVMAttachArgs;18811882/* These will be VM-specific. */18831884#define JDK1_21885#define JDK1_418861887/* End VM-specific. */18881889struct JNIInvokeInterface_ {1890void *reserved0;1891void *reserved1;1892void *reserved2;18931894jint (JNICALL *DestroyJavaVM)(JavaVM *vm);18951896jint (JNICALL *AttachCurrentThread)(JavaVM *vm, void **penv, void *args);18971898jint (JNICALL *DetachCurrentThread)(JavaVM *vm);18991900jint (JNICALL *GetEnv)(JavaVM *vm, void **penv, jint version);19011902jint (JNICALL *AttachCurrentThreadAsDaemon)(JavaVM *vm, void **penv, void *args);1903};19041905struct JavaVM_ {1906const struct JNIInvokeInterface_ *functions;1907#ifdef __cplusplus19081909jint DestroyJavaVM() {1910return functions->DestroyJavaVM(this);1911}1912jint AttachCurrentThread(void **penv, void *args) {1913return functions->AttachCurrentThread(this, penv, args);1914}1915jint DetachCurrentThread() {1916return functions->DetachCurrentThread(this);1917}19181919jint GetEnv(void **penv, jint version) {1920return functions->GetEnv(this, penv, version);1921}1922jint AttachCurrentThreadAsDaemon(void **penv, void *args) {1923return functions->AttachCurrentThreadAsDaemon(this, penv, args);1924}1925#endif1926};19271928#ifdef _JNI_IMPLEMENTATION_1929#define _JNI_IMPORT_OR_EXPORT_ JNIEXPORT1930#else1931#define _JNI_IMPORT_OR_EXPORT_ JNIIMPORT1932#endif1933_JNI_IMPORT_OR_EXPORT_ jint JNICALL1934JNI_GetDefaultJavaVMInitArgs(void *args);19351936_JNI_IMPORT_OR_EXPORT_ jint JNICALL1937JNI_CreateJavaVM(JavaVM **pvm, void **penv, void *args);19381939_JNI_IMPORT_OR_EXPORT_ jint JNICALL1940JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);19411942/* Defined by native libraries. */1943JNIEXPORT jint JNICALL1944JNI_OnLoad(JavaVM *vm, void *reserved);19451946JNIEXPORT void JNICALL1947JNI_OnUnload(JavaVM *vm, void *reserved);19481949#define JNI_VERSION_1_1 0x000100011950#define JNI_VERSION_1_2 0x000100021951#define JNI_VERSION_1_4 0x000100041952#define JNI_VERSION_1_6 0x000100061953#define JNI_VERSION_1_8 0x0001000819541955#ifdef __cplusplus1956} /* extern "C" */1957#endif /* __cplusplus */19581959#endif /* !_JAVASOFT_JNI_H_ */196019611962