codekingpro/portable-devtools
116k
1/*2 * Copyright (c) 1996, 2023, Oracle and/or its affiliates. All rights reserved.3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.4 *5 * This code is free software; you can redistribute it and/or modify it6 * under the terms of the GNU General Public License version 2 only, as7 * published by the Free Software Foundation. Oracle designates this8 * particular file as subject to the "Classpath" exception as provided9 * by Oracle in the LICENSE file that accompanied this code.10 *11 * This code is distributed in the hope that it will be useful, but WITHOUT12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License14 * version 2 for more details (a copy is included in the LICENSE file that15 * accompanied this code).16 *17 * You should have received a copy of the GNU General Public License version18 * 2 along with this work; if not, write to the Free Software Foundation,19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.20 *21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA22 * or visit www.oracle.com if you need additional information or have any23 * questions.24 */25 26/*27 * We used part of Netscape's Java Runtime Interface (JRI) as the starting28 * point of our design and implementation.29 */30 31/******************************************************************************32 * Java Runtime Interface33 * Copyright (c) 1996 Netscape Communications Corporation. All rights reserved.34 *****************************************************************************/35 36#ifndef _JAVASOFT_JNI_H_37#define _JAVASOFT_JNI_H_38 39#include <stdio.h>40#include <stdarg.h>41 42/* jni_md.h contains the machine-dependent typedefs for jbyte, jint43 and jlong */44 45#include "jni_md.h"46 47#ifdef __cplusplus48extern "C" {49#endif50 51/*52 * JNI Types53 */54 55#ifndef JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H56 57typedef unsigned char jboolean;58typedef unsigned short jchar;59typedef short jshort;60typedef float jfloat;61typedef double jdouble;62 63typedef jint jsize;64 65#ifdef __cplusplus66 67class _jobject {};68class _jclass : public _jobject {};69class _jthrowable : public _jobject {};70class _jstring : public _jobject {};71class _jarray : public _jobject {};72class _jbooleanArray : public _jarray {};73class _jbyteArray : public _jarray {};74class _jcharArray : public _jarray {};75class _jshortArray : public _jarray {};76class _jintArray : public _jarray {};77class _jlongArray : public _jarray {};78class _jfloatArray : public _jarray {};79class _jdoubleArray : public _jarray {};80class _jobjectArray : public _jarray {};81 82typedef _jobject *jobject;83typedef _jclass *jclass;84typedef _jthrowable *jthrowable;85typedef _jstring *jstring;86typedef _jarray *jarray;87typedef _jbooleanArray *jbooleanArray;88typedef _jbyteArray *jbyteArray;89typedef _jcharArray *jcharArray;90typedef _jshortArray *jshortArray;91typedef _jintArray *jintArray;92typedef _jlongArray *jlongArray;93typedef _jfloatArray *jfloatArray;94typedef _jdoubleArray *jdoubleArray;95typedef _jobjectArray *jobjectArray;96 97#else98 99struct _jobject;100 101typedef struct _jobject *jobject;102typedef jobject jclass;103typedef jobject jthrowable;104typedef jobject jstring;105typedef jobject jarray;106typedef jarray jbooleanArray;107typedef jarray jbyteArray;108typedef jarray jcharArray;109typedef jarray jshortArray;110typedef jarray jintArray;111typedef jarray jlongArray;112typedef jarray jfloatArray;113typedef jarray jdoubleArray;114typedef jarray jobjectArray;115 116#endif117 118typedef jobject jweak;119 120typedef union jvalue {121 jboolean z;122 jbyte b;123 jchar c;124 jshort s;125 jint i;126 jlong j;127 jfloat f;128 jdouble d;129 jobject l;130} jvalue;131 132struct _jfieldID;133typedef struct _jfieldID *jfieldID;134 135struct _jmethodID;136typedef struct _jmethodID *jmethodID;137 138/* Return values from jobjectRefType */139typedef enum _jobjectType {140 JNIInvalidRefType = 0,141 JNILocalRefType = 1,142 JNIGlobalRefType = 2,143 JNIWeakGlobalRefType = 3144} jobjectRefType;145 146 147#endif /* JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H */148 149/*150 * jboolean constants151 */152 153#define JNI_FALSE 0154#define JNI_TRUE 1155 156/*157 * possible return values for JNI functions.158 */159 160#define JNI_OK 0 /* success */161#define JNI_ERR (-1) /* unknown error */162#define JNI_EDETACHED (-2) /* thread detached from the VM */163#define JNI_EVERSION (-3) /* JNI version error */164#define JNI_ENOMEM (-4) /* not enough memory */165#define JNI_EEXIST (-5) /* VM already created */166#define JNI_EINVAL (-6) /* invalid arguments */167 168/*169 * used in ReleaseScalarArrayElements170 */171 172#define JNI_COMMIT 1173#define JNI_ABORT 2174 175/*176 * used in RegisterNatives to describe native method name, signature,177 * and function pointer.178 */179 180typedef struct {181 char *name;182 char *signature;183 void *fnPtr;184} JNINativeMethod;185 186/*187 * JNI Native Method Interface.188 */189 190struct JNINativeInterface_;191 192struct JNIEnv_;193 194#ifdef __cplusplus195typedef JNIEnv_ JNIEnv;196#else197typedef const struct JNINativeInterface_ *JNIEnv;198#endif199 200/*201 * JNI Invocation Interface.202 */203 204struct JNIInvokeInterface_;205 206struct JavaVM_;207 208#ifdef __cplusplus209typedef JavaVM_ JavaVM;210#else211typedef const struct JNIInvokeInterface_ *JavaVM;212#endif213 214struct JNINativeInterface_ {215 void *reserved0;216 void *reserved1;217 void *reserved2;218 219 void *reserved3;220 jint (JNICALL *GetVersion)(JNIEnv *env);221 222 jclass (JNICALL *DefineClass)223 (JNIEnv *env, const char *name, jobject loader, const jbyte *buf,224 jsize len);225 jclass (JNICALL *FindClass)226 (JNIEnv *env, const char *name);227 228 jmethodID (JNICALL *FromReflectedMethod)229 (JNIEnv *env, jobject method);230 jfieldID (JNICALL *FromReflectedField)231 (JNIEnv *env, jobject field);232 233 jobject (JNICALL *ToReflectedMethod)234 (JNIEnv *env, jclass cls, jmethodID methodID, jboolean isStatic);235 236 jclass (JNICALL *GetSuperclass)237 (JNIEnv *env, jclass sub);238 jboolean (JNICALL *IsAssignableFrom)239 (JNIEnv *env, jclass sub, jclass sup);240 241 jobject (JNICALL *ToReflectedField)242 (JNIEnv *env, jclass cls, jfieldID fieldID, jboolean isStatic);243 244 jint (JNICALL *Throw)245 (JNIEnv *env, jthrowable obj);246 jint (JNICALL *ThrowNew)247 (JNIEnv *env, jclass clazz, const char *msg);248 jthrowable (JNICALL *ExceptionOccurred)249 (JNIEnv *env);250 void (JNICALL *ExceptionDescribe)251 (JNIEnv *env);252 void (JNICALL *ExceptionClear)253 (JNIEnv *env);254 void (JNICALL *FatalError)255 (JNIEnv *env, const char *msg);256 257 jint (JNICALL *PushLocalFrame)258 (JNIEnv *env, jint capacity);259 jobject (JNICALL *PopLocalFrame)260 (JNIEnv *env, jobject result);261 262 jobject (JNICALL *NewGlobalRef)263 (JNIEnv *env, jobject lobj);264 void (JNICALL *DeleteGlobalRef)265 (JNIEnv *env, jobject gref);266 void (JNICALL *DeleteLocalRef)267 (JNIEnv *env, jobject obj);268 jboolean (JNICALL *IsSameObject)269 (JNIEnv *env, jobject obj1, jobject obj2);270 jobject (JNICALL *NewLocalRef)271 (JNIEnv *env, jobject ref);272 jint (JNICALL *EnsureLocalCapacity)273 (JNIEnv *env, jint capacity);274 275 jobject (JNICALL *AllocObject)276 (JNIEnv *env, jclass clazz);277 jobject (JNICALL *NewObject)278 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);279 jobject (JNICALL *NewObjectV)280 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);281 jobject (JNICALL *NewObjectA)282 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);283 284 jclass (JNICALL *GetObjectClass)285 (JNIEnv *env, jobject obj);286 jboolean (JNICALL *IsInstanceOf)287 (JNIEnv *env, jobject obj, jclass clazz);288 289 jmethodID (JNICALL *GetMethodID)290 (JNIEnv *env, jclass clazz, const char *name, const char *sig);291 292 jobject (JNICALL *CallObjectMethod)293 (JNIEnv *env, jobject obj, jmethodID methodID, ...);294 jobject (JNICALL *CallObjectMethodV)295 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);296 jobject (JNICALL *CallObjectMethodA)297 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);298 299 jboolean (JNICALL *CallBooleanMethod)300 (JNIEnv *env, jobject obj, jmethodID methodID, ...);301 jboolean (JNICALL *CallBooleanMethodV)302 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);303 jboolean (JNICALL *CallBooleanMethodA)304 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);305 306 jbyte (JNICALL *CallByteMethod)307 (JNIEnv *env, jobject obj, jmethodID methodID, ...);308 jbyte (JNICALL *CallByteMethodV)309 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);310 jbyte (JNICALL *CallByteMethodA)311 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);312 313 jchar (JNICALL *CallCharMethod)314 (JNIEnv *env, jobject obj, jmethodID methodID, ...);315 jchar (JNICALL *CallCharMethodV)316 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);317 jchar (JNICALL *CallCharMethodA)318 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);319 320 jshort (JNICALL *CallShortMethod)321 (JNIEnv *env, jobject obj, jmethodID methodID, ...);322 jshort (JNICALL *CallShortMethodV)323 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);324 jshort (JNICALL *CallShortMethodA)325 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);326 327 jint (JNICALL *CallIntMethod)328 (JNIEnv *env, jobject obj, jmethodID methodID, ...);329 jint (JNICALL *CallIntMethodV)330 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);331 jint (JNICALL *CallIntMethodA)332 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);333 334 jlong (JNICALL *CallLongMethod)335 (JNIEnv *env, jobject obj, jmethodID methodID, ...);336 jlong (JNICALL *CallLongMethodV)337 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);338 jlong (JNICALL *CallLongMethodA)339 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);340 341 jfloat (JNICALL *CallFloatMethod)342 (JNIEnv *env, jobject obj, jmethodID methodID, ...);343 jfloat (JNICALL *CallFloatMethodV)344 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);345 jfloat (JNICALL *CallFloatMethodA)346 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);347 348 jdouble (JNICALL *CallDoubleMethod)349 (JNIEnv *env, jobject obj, jmethodID methodID, ...);350 jdouble (JNICALL *CallDoubleMethodV)351 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);352 jdouble (JNICALL *CallDoubleMethodA)353 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);354 355 void (JNICALL *CallVoidMethod)356 (JNIEnv *env, jobject obj, jmethodID methodID, ...);357 void (JNICALL *CallVoidMethodV)358 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);359 void (JNICALL *CallVoidMethodA)360 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);361 362 jobject (JNICALL *CallNonvirtualObjectMethod)363 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);364 jobject (JNICALL *CallNonvirtualObjectMethodV)365 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,366 va_list args);367 jobject (JNICALL *CallNonvirtualObjectMethodA)368 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,369 const jvalue * args);370 371 jboolean (JNICALL *CallNonvirtualBooleanMethod)372 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);373 jboolean (JNICALL *CallNonvirtualBooleanMethodV)374 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,375 va_list args);376 jboolean (JNICALL *CallNonvirtualBooleanMethodA)377 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,378 const jvalue * args);379 380 jbyte (JNICALL *CallNonvirtualByteMethod)381 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);382 jbyte (JNICALL *CallNonvirtualByteMethodV)383 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,384 va_list args);385 jbyte (JNICALL *CallNonvirtualByteMethodA)386 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,387 const jvalue *args);388 389 jchar (JNICALL *CallNonvirtualCharMethod)390 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);391 jchar (JNICALL *CallNonvirtualCharMethodV)392 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,393 va_list args);394 jchar (JNICALL *CallNonvirtualCharMethodA)395 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,396 const jvalue *args);397 398 jshort (JNICALL *CallNonvirtualShortMethod)399 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);400 jshort (JNICALL *CallNonvirtualShortMethodV)401 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,402 va_list args);403 jshort (JNICALL *CallNonvirtualShortMethodA)404 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,405 const jvalue *args);406 407 jint (JNICALL *CallNonvirtualIntMethod)408 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);409 jint (JNICALL *CallNonvirtualIntMethodV)410 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,411 va_list args);412 jint (JNICALL *CallNonvirtualIntMethodA)413 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,414 const jvalue *args);415 416 jlong (JNICALL *CallNonvirtualLongMethod)417 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);418 jlong (JNICALL *CallNonvirtualLongMethodV)419 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,420 va_list args);421 jlong (JNICALL *CallNonvirtualLongMethodA)422 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,423 const jvalue *args);424 425 jfloat (JNICALL *CallNonvirtualFloatMethod)426 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);427 jfloat (JNICALL *CallNonvirtualFloatMethodV)428 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,429 va_list args);430 jfloat (JNICALL *CallNonvirtualFloatMethodA)431 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,432 const jvalue *args);433 434 jdouble (JNICALL *CallNonvirtualDoubleMethod)435 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);436 jdouble (JNICALL *CallNonvirtualDoubleMethodV)437 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,438 va_list args);439 jdouble (JNICALL *CallNonvirtualDoubleMethodA)440 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,441 const jvalue *args);442 443 void (JNICALL *CallNonvirtualVoidMethod)444 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);445 void (JNICALL *CallNonvirtualVoidMethodV)446 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,447 va_list args);448 void (JNICALL *CallNonvirtualVoidMethodA)449 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,450 const jvalue * args);451 452 jfieldID (JNICALL *GetFieldID)453 (JNIEnv *env, jclass clazz, const char *name, const char *sig);454 455 jobject (JNICALL *GetObjectField)456 (JNIEnv *env, jobject obj, jfieldID fieldID);457 jboolean (JNICALL *GetBooleanField)458 (JNIEnv *env, jobject obj, jfieldID fieldID);459 jbyte (JNICALL *GetByteField)460 (JNIEnv *env, jobject obj, jfieldID fieldID);461 jchar (JNICALL *GetCharField)462 (JNIEnv *env, jobject obj, jfieldID fieldID);463 jshort (JNICALL *GetShortField)464 (JNIEnv *env, jobject obj, jfieldID fieldID);465 jint (JNICALL *GetIntField)466 (JNIEnv *env, jobject obj, jfieldID fieldID);467 jlong (JNICALL *GetLongField)468 (JNIEnv *env, jobject obj, jfieldID fieldID);469 jfloat (JNICALL *GetFloatField)470 (JNIEnv *env, jobject obj, jfieldID fieldID);471 jdouble (JNICALL *GetDoubleField)472 (JNIEnv *env, jobject obj, jfieldID fieldID);473 474 void (JNICALL *SetObjectField)475 (JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);476 void (JNICALL *SetBooleanField)477 (JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);478 void (JNICALL *SetByteField)479 (JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);480 void (JNICALL *SetCharField)481 (JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);482 void (JNICALL *SetShortField)483 (JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);484 void (JNICALL *SetIntField)485 (JNIEnv *env, jobject obj, jfieldID fieldID, jint val);486 void (JNICALL *SetLongField)487 (JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);488 void (JNICALL *SetFloatField)489 (JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);490 void (JNICALL *SetDoubleField)491 (JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);492 493 jmethodID (JNICALL *GetStaticMethodID)494 (JNIEnv *env, jclass clazz, const char *name, const char *sig);495 496 jobject (JNICALL *CallStaticObjectMethod)497 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);498 jobject (JNICALL *CallStaticObjectMethodV)499 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);500 jobject (JNICALL *CallStaticObjectMethodA)501 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);502 503 jboolean (JNICALL *CallStaticBooleanMethod)504 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);505 jboolean (JNICALL *CallStaticBooleanMethodV)506 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);507 jboolean (JNICALL *CallStaticBooleanMethodA)508 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);509 510 jbyte (JNICALL *CallStaticByteMethod)511 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);512 jbyte (JNICALL *CallStaticByteMethodV)513 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);514 jbyte (JNICALL *CallStaticByteMethodA)515 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);516 517 jchar (JNICALL *CallStaticCharMethod)518 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);519 jchar (JNICALL *CallStaticCharMethodV)520 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);521 jchar (JNICALL *CallStaticCharMethodA)522 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);523 524 jshort (JNICALL *CallStaticShortMethod)525 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);526 jshort (JNICALL *CallStaticShortMethodV)527 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);528 jshort (JNICALL *CallStaticShortMethodA)529 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);530 531 jint (JNICALL *CallStaticIntMethod)532 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);533 jint (JNICALL *CallStaticIntMethodV)534 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);535 jint (JNICALL *CallStaticIntMethodA)536 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);537 538 jlong (JNICALL *CallStaticLongMethod)539 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);540 jlong (JNICALL *CallStaticLongMethodV)541 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);542 jlong (JNICALL *CallStaticLongMethodA)543 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);544 545 jfloat (JNICALL *CallStaticFloatMethod)546 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);547 jfloat (JNICALL *CallStaticFloatMethodV)548 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);549 jfloat (JNICALL *CallStaticFloatMethodA)550 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);551 552 jdouble (JNICALL *CallStaticDoubleMethod)553 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);554 jdouble (JNICALL *CallStaticDoubleMethodV)555 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);556 jdouble (JNICALL *CallStaticDoubleMethodA)557 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);558 559 void (JNICALL *CallStaticVoidMethod)560 (JNIEnv *env, jclass cls, jmethodID methodID, ...);561 void (JNICALL *CallStaticVoidMethodV)562 (JNIEnv *env, jclass cls, jmethodID methodID, va_list args);563 void (JNICALL *CallStaticVoidMethodA)564 (JNIEnv *env, jclass cls, jmethodID methodID, const jvalue * args);565 566 jfieldID (JNICALL *GetStaticFieldID)567 (JNIEnv *env, jclass clazz, const char *name, const char *sig);568 jobject (JNICALL *GetStaticObjectField)569 (JNIEnv *env, jclass clazz, jfieldID fieldID);570 jboolean (JNICALL *GetStaticBooleanField)571 (JNIEnv *env, jclass clazz, jfieldID fieldID);572 jbyte (JNICALL *GetStaticByteField)573 (JNIEnv *env, jclass clazz, jfieldID fieldID);574 jchar (JNICALL *GetStaticCharField)575 (JNIEnv *env, jclass clazz, jfieldID fieldID);576 jshort (JNICALL *GetStaticShortField)577 (JNIEnv *env, jclass clazz, jfieldID fieldID);578 jint (JNICALL *GetStaticIntField)579 (JNIEnv *env, jclass clazz, jfieldID fieldID);580 jlong (JNICALL *GetStaticLongField)581 (JNIEnv *env, jclass clazz, jfieldID fieldID);582 jfloat (JNICALL *GetStaticFloatField)583 (JNIEnv *env, jclass clazz, jfieldID fieldID);584 jdouble (JNICALL *GetStaticDoubleField)585 (JNIEnv *env, jclass clazz, jfieldID fieldID);586 587 void (JNICALL *SetStaticObjectField)588 (JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value);589 void (JNICALL *SetStaticBooleanField)590 (JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value);591 void (JNICALL *SetStaticByteField)592 (JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value);593 void (JNICALL *SetStaticCharField)594 (JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value);595 void (JNICALL *SetStaticShortField)596 (JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value);597 void (JNICALL *SetStaticIntField)598 (JNIEnv *env, jclass clazz, jfieldID fieldID, jint value);599 void (JNICALL *SetStaticLongField)600 (JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value);601 void (JNICALL *SetStaticFloatField)602 (JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value);603 void (JNICALL *SetStaticDoubleField)604 (JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value);605 606 jstring (JNICALL *NewString)607 (JNIEnv *env, const jchar *unicode, jsize len);608 jsize (JNICALL *GetStringLength)609 (JNIEnv *env, jstring str);610 const jchar *(JNICALL *GetStringChars)611 (JNIEnv *env, jstring str, jboolean *isCopy);612 void (JNICALL *ReleaseStringChars)613 (JNIEnv *env, jstring str, const jchar *chars);614 615 jstring (JNICALL *NewStringUTF)616 (JNIEnv *env, const char *utf);617 jsize (JNICALL *GetStringUTFLength)618 (JNIEnv *env, jstring str);619 const char* (JNICALL *GetStringUTFChars)620 (JNIEnv *env, jstring str, jboolean *isCopy);621 void (JNICALL *ReleaseStringUTFChars)622 (JNIEnv *env, jstring str, const char* chars);623 624 625 jsize (JNICALL *GetArrayLength)626 (JNIEnv *env, jarray array);627 628 jobjectArray (JNICALL *NewObjectArray)629 (JNIEnv *env, jsize len, jclass clazz, jobject init);630 jobject (JNICALL *GetObjectArrayElement)631 (JNIEnv *env, jobjectArray array, jsize index);632 void (JNICALL *SetObjectArrayElement)633 (JNIEnv *env, jobjectArray array, jsize index, jobject val);634 635 jbooleanArray (JNICALL *NewBooleanArray)636 (JNIEnv *env, jsize len);637 jbyteArray (JNICALL *NewByteArray)638 (JNIEnv *env, jsize len);639 jcharArray (JNICALL *NewCharArray)640 (JNIEnv *env, jsize len);641 jshortArray (JNICALL *NewShortArray)642 (JNIEnv *env, jsize len);643 jintArray (JNICALL *NewIntArray)644 (JNIEnv *env, jsize len);645 jlongArray (JNICALL *NewLongArray)646 (JNIEnv *env, jsize len);647 jfloatArray (JNICALL *NewFloatArray)648 (JNIEnv *env, jsize len);649 jdoubleArray (JNICALL *NewDoubleArray)650 (JNIEnv *env, jsize len);651 652 jboolean * (JNICALL *GetBooleanArrayElements)653 (JNIEnv *env, jbooleanArray array, jboolean *isCopy);654 jbyte * (JNICALL *GetByteArrayElements)655 (JNIEnv *env, jbyteArray array, jboolean *isCopy);656 jchar * (JNICALL *GetCharArrayElements)657 (JNIEnv *env, jcharArray array, jboolean *isCopy);658 jshort * (JNICALL *GetShortArrayElements)659 (JNIEnv *env, jshortArray array, jboolean *isCopy);660 jint * (JNICALL *GetIntArrayElements)661 (JNIEnv *env, jintArray array, jboolean *isCopy);662 jlong * (JNICALL *GetLongArrayElements)663 (JNIEnv *env, jlongArray array, jboolean *isCopy);664 jfloat * (JNICALL *GetFloatArrayElements)665 (JNIEnv *env, jfloatArray array, jboolean *isCopy);666 jdouble * (JNICALL *GetDoubleArrayElements)667 (JNIEnv *env, jdoubleArray array, jboolean *isCopy);668 669 void (JNICALL *ReleaseBooleanArrayElements)670 (JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode);671 void (JNICALL *ReleaseByteArrayElements)672 (JNIEnv *env, jbyteArray array, jbyte *elems, jint mode);673 void (JNICALL *ReleaseCharArrayElements)674 (JNIEnv *env, jcharArray array, jchar *elems, jint mode);675 void (JNICALL *ReleaseShortArrayElements)676 (JNIEnv *env, jshortArray array, jshort *elems, jint mode);677 void (JNICALL *ReleaseIntArrayElements)678 (JNIEnv *env, jintArray array, jint *elems, jint mode);679 void (JNICALL *ReleaseLongArrayElements)680 (JNIEnv *env, jlongArray array, jlong *elems, jint mode);681 void (JNICALL *ReleaseFloatArrayElements)682 (JNIEnv *env, jfloatArray array, jfloat *elems, jint mode);683 void (JNICALL *ReleaseDoubleArrayElements)684 (JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode);685 686 void (JNICALL *GetBooleanArrayRegion)687 (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);688 void (JNICALL *GetByteArrayRegion)689 (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);690 void (JNICALL *GetCharArrayRegion)691 (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);692 void (JNICALL *GetShortArrayRegion)693 (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);694 void (JNICALL *GetIntArrayRegion)695 (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);696 void (JNICALL *GetLongArrayRegion)697 (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);698 void (JNICALL *GetFloatArrayRegion)699 (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);700 void (JNICALL *GetDoubleArrayRegion)701 (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);702 703 void (JNICALL *SetBooleanArrayRegion)704 (JNIEnv *env, jbooleanArray array, jsize start, jsize l, const jboolean *buf);705 void (JNICALL *SetByteArrayRegion)706 (JNIEnv *env, jbyteArray array, jsize start, jsize len, const jbyte *buf);707 void (JNICALL *SetCharArrayRegion)708 (JNIEnv *env, jcharArray array, jsize start, jsize len, const jchar *buf);709 void (JNICALL *SetShortArrayRegion)710 (JNIEnv *env, jshortArray array, jsize start, jsize len, const jshort *buf);711 void (JNICALL *SetIntArrayRegion)712 (JNIEnv *env, jintArray array, jsize start, jsize len, const jint *buf);713 void (JNICALL *SetLongArrayRegion)714 (JNIEnv *env, jlongArray array, jsize start, jsize len, const jlong *buf);715 void (JNICALL *SetFloatArrayRegion)716 (JNIEnv *env, jfloatArray array, jsize start, jsize len, const jfloat *buf);717 void (JNICALL *SetDoubleArrayRegion)718 (JNIEnv *env, jdoubleArray array, jsize start, jsize len, const jdouble *buf);719 720 jint (JNICALL *RegisterNatives)721 (JNIEnv *env, jclass clazz, const JNINativeMethod *methods,722 jint nMethods);723 jint (JNICALL *UnregisterNatives)724 (JNIEnv *env, jclass clazz);725 726 jint (JNICALL *MonitorEnter)727 (JNIEnv *env, jobject obj);728 jint (JNICALL *MonitorExit)729 (JNIEnv *env, jobject obj);730 731 jint (JNICALL *GetJavaVM)732 (JNIEnv *env, JavaVM **vm);733 734 void (JNICALL *GetStringRegion)735 (JNIEnv *env, jstring str, jsize start, jsize len, jchar *buf);736 void (JNICALL *GetStringUTFRegion)737 (JNIEnv *env, jstring str, jsize start, jsize len, char *buf);738 739 void * (JNICALL *GetPrimitiveArrayCritical)740 (JNIEnv *env, jarray array, jboolean *isCopy);741 void (JNICALL *ReleasePrimitiveArrayCritical)742 (JNIEnv *env, jarray array, void *carray, jint mode);743 744 const jchar * (JNICALL *GetStringCritical)745 (JNIEnv *env, jstring string, jboolean *isCopy);746 void (JNICALL *ReleaseStringCritical)747 (JNIEnv *env, jstring string, const jchar *cstring);748 749 jweak (JNICALL *NewWeakGlobalRef)750 (JNIEnv *env, jobject obj);751 void (JNICALL *DeleteWeakGlobalRef)752 (JNIEnv *env, jweak ref);753 754 jboolean (JNICALL *ExceptionCheck)755 (JNIEnv *env);756 757 jobject (JNICALL *NewDirectByteBuffer)758 (JNIEnv* env, void* address, jlong capacity);759 void* (JNICALL *GetDirectBufferAddress)760 (JNIEnv* env, jobject buf);761 jlong (JNICALL *GetDirectBufferCapacity)762 (JNIEnv* env, jobject buf);763 764 /* New JNI 1.6 Features */765 766 jobjectRefType (JNICALL *GetObjectRefType)767 (JNIEnv* env, jobject obj);768 769 /* Module Features */770 771 jobject (JNICALL *GetModule)772 (JNIEnv* env, jclass clazz);773 774 /* Virtual threads */775 776 jboolean (JNICALL *IsVirtualThread)777 (JNIEnv* env, jobject obj);778};779 780/*781 * We use inlined functions for C++ so that programmers can write:782 *783 * env->FindClass("java/lang/String")784 *785 * in C++ rather than:786 *787 * (*env)->FindClass(env, "java/lang/String")788 *789 * in C.790 */791 792struct JNIEnv_ {793 const struct JNINativeInterface_ *functions;794#ifdef __cplusplus795 796 jint GetVersion() {797 return functions->GetVersion(this);798 }799 jclass DefineClass(const char *name, jobject loader, const jbyte *buf,800 jsize len) {801 return functions->DefineClass(this, name, loader, buf, len);802 }803 jclass FindClass(const char *name) {804 return functions->FindClass(this, name);805 }806 jmethodID FromReflectedMethod(jobject method) {807 return functions->FromReflectedMethod(this,method);808 }809 jfieldID FromReflectedField(jobject field) {810 return functions->FromReflectedField(this,field);811 }812 813 jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic) {814 return functions->ToReflectedMethod(this, cls, methodID, isStatic);815 }816 817 jclass GetSuperclass(jclass sub) {818 return functions->GetSuperclass(this, sub);819 }820 jboolean IsAssignableFrom(jclass sub, jclass sup) {821 return functions->IsAssignableFrom(this, sub, sup);822 }823 824 jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic) {825 return functions->ToReflectedField(this,cls,fieldID,isStatic);826 }827 828 jint Throw(jthrowable obj) {829 return functions->Throw(this, obj);830 }831 jint ThrowNew(jclass clazz, const char *msg) {832 return functions->ThrowNew(this, clazz, msg);833 }834 jthrowable ExceptionOccurred() {835 return functions->ExceptionOccurred(this);836 }837 void ExceptionDescribe() {838 functions->ExceptionDescribe(this);839 }840 void ExceptionClear() {841 functions->ExceptionClear(this);842 }843 void FatalError(const char *msg) {844 functions->FatalError(this, msg);845 }846 847 jint PushLocalFrame(jint capacity) {848 return functions->PushLocalFrame(this,capacity);849 }850 jobject PopLocalFrame(jobject result) {851 return functions->PopLocalFrame(this,result);852 }853 854 jobject NewGlobalRef(jobject lobj) {855 return functions->NewGlobalRef(this,lobj);856 }857 void DeleteGlobalRef(jobject gref) {858 functions->DeleteGlobalRef(this,gref);859 }860 void DeleteLocalRef(jobject obj) {861 functions->DeleteLocalRef(this, obj);862 }863 864 jboolean IsSameObject(jobject obj1, jobject obj2) {865 return functions->IsSameObject(this,obj1,obj2);866 }867 868 jobject NewLocalRef(jobject ref) {869 return functions->NewLocalRef(this,ref);870 }871 jint EnsureLocalCapacity(jint capacity) {872 return functions->EnsureLocalCapacity(this,capacity);873 }874 875 jobject AllocObject(jclass clazz) {876 return functions->AllocObject(this,clazz);877 }878 jobject NewObject(jclass clazz, jmethodID methodID, ...) {879 va_list args;880 jobject result;881 va_start(args, methodID);882 result = functions->NewObjectV(this,clazz,methodID,args);883 va_end(args);884 return result;885 }886 jobject NewObjectV(jclass clazz, jmethodID methodID,887 va_list args) {888 return functions->NewObjectV(this,clazz,methodID,args);889 }890 jobject NewObjectA(jclass clazz, jmethodID methodID,891 const jvalue *args) {892 return functions->NewObjectA(this,clazz,methodID,args);893 }894 895 jclass GetObjectClass(jobject obj) {896 return functions->GetObjectClass(this,obj);897 }898 jboolean IsInstanceOf(jobject obj, jclass clazz) {899 return functions->IsInstanceOf(this,obj,clazz);900 }901 902 jmethodID GetMethodID(jclass clazz, const char *name,903 const char *sig) {904 return functions->GetMethodID(this,clazz,name,sig);905 }906 907 jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {908 va_list args;909 jobject result;910 va_start(args,methodID);911 result = functions->CallObjectMethodV(this,obj,methodID,args);912 va_end(args);913 return result;914 }915 jobject CallObjectMethodV(jobject obj, jmethodID methodID,916 va_list args) {917 return functions->CallObjectMethodV(this,obj,methodID,args);918 }919 jobject CallObjectMethodA(jobject obj, jmethodID methodID,920 const jvalue * args) {921 return functions->CallObjectMethodA(this,obj,methodID,args);922 }923 924 jboolean CallBooleanMethod(jobject obj,925 jmethodID methodID, ...) {926 va_list args;927 jboolean result;928 va_start(args,methodID);929 result = functions->CallBooleanMethodV(this,obj,methodID,args);930 va_end(args);931 return result;932 }933 jboolean CallBooleanMethodV(jobject obj, jmethodID methodID,934 va_list args) {935 return functions->CallBooleanMethodV(this,obj,methodID,args);936 }937 jboolean CallBooleanMethodA(jobject obj, jmethodID methodID,938 const jvalue * args) {939 return functions->CallBooleanMethodA(this,obj,methodID, args);940 }941 942 jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {943 va_list args;944 jbyte result;945 va_start(args,methodID);946 result = functions->CallByteMethodV(this,obj,methodID,args);947 va_end(args);948 return result;949 }950 jbyte CallByteMethodV(jobject obj, jmethodID methodID,951 va_list args) {952 return functions->CallByteMethodV(this,obj,methodID,args);953 }954 jbyte CallByteMethodA(jobject obj, jmethodID methodID,955 const jvalue * args) {956 return functions->CallByteMethodA(this,obj,methodID,args);957 }958 959 jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {960 va_list args;961 jchar result;962 va_start(args,methodID);963 result = functions->CallCharMethodV(this,obj,methodID,args);964 va_end(args);965 return result;966 }967 jchar CallCharMethodV(jobject obj, jmethodID methodID,968 va_list args) {969 return functions->CallCharMethodV(this,obj,methodID,args);970 }971 jchar CallCharMethodA(jobject obj, jmethodID methodID,972 const jvalue * args) {973 return functions->CallCharMethodA(this,obj,methodID,args);974 }975 976 jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {977 va_list args;978 jshort result;979 va_start(args,methodID);980 result = functions->CallShortMethodV(this,obj,methodID,args);981 va_end(args);982 return result;983 }984 jshort CallShortMethodV(jobject obj, jmethodID methodID,985 va_list args) {986 return functions->CallShortMethodV(this,obj,methodID,args);987 }988 jshort CallShortMethodA(jobject obj, jmethodID methodID,989 const jvalue * args) {990 return functions->CallShortMethodA(this,obj,methodID,args);991 }992 993 jint CallIntMethod(jobject obj, jmethodID methodID, ...) {994 va_list args;995 jint result;996 va_start(args,methodID);997 result = functions->CallIntMethodV(this,obj,methodID,args);998 va_end(args);999 return result;1000 }1001 jint CallIntMethodV(jobject obj, jmethodID methodID,1002 va_list args) {1003 return functions->CallIntMethodV(this,obj,methodID,args);1004 }1005 jint CallIntMethodA(jobject obj, jmethodID methodID,1006 const jvalue * args) {1007 return functions->CallIntMethodA(this,obj,methodID,args);1008 }1009 1010 jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {1011 va_list args;1012 jlong result;1013 va_start(args,methodID);1014 result = functions->CallLongMethodV(this,obj,methodID,args);1015 va_end(args);1016 return result;1017 }1018 jlong CallLongMethodV(jobject obj, jmethodID methodID,1019 va_list args) {1020 return functions->CallLongMethodV(this,obj,methodID,args);1021 }1022 jlong CallLongMethodA(jobject obj, jmethodID methodID,1023 const jvalue * args) {1024 return functions->CallLongMethodA(this,obj,methodID,args);1025 }1026 1027 jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {1028 va_list args;1029 jfloat result;1030 va_start(args,methodID);1031 result = functions->CallFloatMethodV(this,obj,methodID,args);1032 va_end(args);1033 return result;1034 }1035 jfloat CallFloatMethodV(jobject obj, jmethodID methodID,1036 va_list args) {1037 return functions->CallFloatMethodV(this,obj,methodID,args);1038 }1039 jfloat CallFloatMethodA(jobject obj, jmethodID methodID,1040 const jvalue * args) {1041 return functions->CallFloatMethodA(this,obj,methodID,args);1042 }1043 1044 jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {1045 va_list args;1046 jdouble result;1047 va_start(args,methodID);1048 result = functions->CallDoubleMethodV(this,obj,methodID,args);1049 va_end(args);1050 return result;1051 }1052 jdouble CallDoubleMethodV(jobject obj, jmethodID methodID,1053 va_list args) {1054 return functions->CallDoubleMethodV(this,obj,methodID,args);1055 }1056 jdouble CallDoubleMethodA(jobject obj, jmethodID methodID,1057 const jvalue * args) {1058 return functions->CallDoubleMethodA(this,obj,methodID,args);1059 }1060 1061 void CallVoidMethod(jobject obj, jmethodID methodID, ...) {1062 va_list args;1063 va_start(args,methodID);1064 functions->CallVoidMethodV(this,obj,methodID,args);1065 va_end(args);1066 }1067 void CallVoidMethodV(jobject obj, jmethodID methodID,1068 va_list args) {1069 functions->CallVoidMethodV(this,obj,methodID,args);1070 }1071 void CallVoidMethodA(jobject obj, jmethodID methodID,1072 const jvalue * args) {1073 functions->CallVoidMethodA(this,obj,methodID,args);1074 }1075 1076 jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz,1077 jmethodID methodID, ...) {1078 va_list args;1079 jobject result;1080 va_start(args,methodID);1081 result = functions->CallNonvirtualObjectMethodV(this,obj,clazz,1082 methodID,args);1083 va_end(args);1084 return result;1085 }1086 jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz,1087 jmethodID methodID, va_list args) {1088 return functions->CallNonvirtualObjectMethodV(this,obj,clazz,1089 methodID,args);1090 }1091 jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz,1092 jmethodID methodID, const jvalue * args) {1093 return functions->CallNonvirtualObjectMethodA(this,obj,clazz,1094 methodID,args);1095 }1096 1097 jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz,1098 jmethodID methodID, ...) {1099 va_list args;1100 jboolean result;1101 va_start(args,methodID);1102 result = functions->CallNonvirtualBooleanMethodV(this,obj,clazz,1103 methodID,args);1104 va_end(args);1105 return result;1106 }1107 jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz,1108 jmethodID methodID, va_list args) {1109 return functions->CallNonvirtualBooleanMethodV(this,obj,clazz,1110 methodID,args);1111 }1112 jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz,1113 jmethodID methodID, const jvalue * args) {1114 return functions->CallNonvirtualBooleanMethodA(this,obj,clazz,1115 methodID, args);1116 }1117 1118 jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz,1119 jmethodID methodID, ...) {1120 va_list args;1121 jbyte result;1122 va_start(args,methodID);1123 result = functions->CallNonvirtualByteMethodV(this,obj,clazz,1124 methodID,args);1125 va_end(args);1126 return result;1127 }1128 jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz,1129 jmethodID methodID, va_list args) {1130 return functions->CallNonvirtualByteMethodV(this,obj,clazz,1131 methodID,args);1132 }1133 jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz,1134 jmethodID methodID, const jvalue * args) {1135 return functions->CallNonvirtualByteMethodA(this,obj,clazz,1136 methodID,args);1137 }1138 1139 jchar CallNonvirtualCharMethod(jobject obj, jclass clazz,1140 jmethodID methodID, ...) {1141 va_list args;1142 jchar result;1143 va_start(args,methodID);1144 result = functions->CallNonvirtualCharMethodV(this,obj,clazz,1145 methodID,args);1146 va_end(args);1147 return result;1148 }1149 jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz,1150 jmethodID methodID, va_list args) {1151 return functions->CallNonvirtualCharMethodV(this,obj,clazz,1152 methodID,args);1153 }1154 jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz,1155 jmethodID methodID, const jvalue * args) {1156 return functions->CallNonvirtualCharMethodA(this,obj,clazz,1157 methodID,args);1158 }1159 1160 jshort CallNonvirtualShortMethod(jobject obj, jclass clazz,1161 jmethodID methodID, ...) {1162 va_list args;1163 jshort result;1164 va_start(args,methodID);1165 result = functions->CallNonvirtualShortMethodV(this,obj,clazz,1166 methodID,args);1167 va_end(args);1168 return result;1169 }1170 jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz,1171 jmethodID methodID, va_list args) {1172 return functions->CallNonvirtualShortMethodV(this,obj,clazz,1173 methodID,args);1174 }1175 jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,1176 jmethodID methodID, const jvalue * args) {1177 return functions->CallNonvirtualShortMethodA(this,obj,clazz,1178 methodID,args);1179 }1180 1181 jint CallNonvirtualIntMethod(jobject obj, jclass clazz,1182 jmethodID methodID, ...) {1183 va_list args;1184 jint result;1185 va_start(args,methodID);1186 result = functions->CallNonvirtualIntMethodV(this,obj,clazz,1187 methodID,args);1188 va_end(args);1189 return result;1190 }1191 jint CallNonvirtualIntMethodV(jobject obj, jclass clazz,1192 jmethodID methodID, va_list args) {1193 return functions->CallNonvirtualIntMethodV(this,obj,clazz,1194 methodID,args);1195 }1196 jint CallNonvirtualIntMethodA(jobject obj, jclass clazz,1197 jmethodID methodID, const jvalue * args) {1198 return functions->CallNonvirtualIntMethodA(this,obj,clazz,1199 methodID,args);1200 }