1 /*
2 * Copyright (c) 1996, 2026, 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 it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * 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 WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 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 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
25
26 /*
27 * We used part of Netscape's Java Runtime Interface (JRI) as the starting
28 * point of our design and implementation.
29 */
30
31 /******************************************************************************
32 * Java Runtime Interface
33 * 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, jint
43 and jlong */
44
45 #include "jni_md.h"
46
47 #ifdef __cplusplus
48 extern "C" {
49 #endif
50
51 #define JNICALL
52
53 /*
54 * JNI Types
55 */
56
57 #ifndef JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H
58
59 typedef unsigned char jboolean;
60 typedef unsigned short jchar;
61 typedef short jshort;
62 typedef float jfloat;
63 typedef double jdouble;
64
65 typedef jint jsize;
66
67 #ifdef __cplusplus
68
69 class _jobject {};
70 class _jclass : public _jobject {};
71 class _jthrowable : public _jobject {};
72 class _jstring : public _jobject {};
73 class _jarray : public _jobject {};
74 class _jbooleanArray : public _jarray {};
75 class _jbyteArray : public _jarray {};
76 class _jcharArray : public _jarray {};
77 class _jshortArray : public _jarray {};
78 class _jintArray : public _jarray {};
79 class _jlongArray : public _jarray {};
80 class _jfloatArray : public _jarray {};
81 class _jdoubleArray : public _jarray {};
82 class _jobjectArray : public _jarray {};
83
84 typedef _jobject *jobject;
85 typedef _jclass *jclass;
86 typedef _jthrowable *jthrowable;
87 typedef _jstring *jstring;
88 typedef _jarray *jarray;
89 typedef _jbooleanArray *jbooleanArray;
90 typedef _jbyteArray *jbyteArray;
91 typedef _jcharArray *jcharArray;
92 typedef _jshortArray *jshortArray;
93 typedef _jintArray *jintArray;
94 typedef _jlongArray *jlongArray;
95 typedef _jfloatArray *jfloatArray;
96 typedef _jdoubleArray *jdoubleArray;
97 typedef _jobjectArray *jobjectArray;
98
99 #else
100
101 struct _jobject;
102
103 typedef struct _jobject *jobject;
104 typedef jobject jclass;
105 typedef jobject jthrowable;
106 typedef jobject jstring;
107 typedef jobject jarray;
108 typedef jarray jbooleanArray;
109 typedef jarray jbyteArray;
110 typedef jarray jcharArray;
111 typedef jarray jshortArray;
112 typedef jarray jintArray;
113 typedef jarray jlongArray;
114 typedef jarray jfloatArray;
115 typedef jarray jdoubleArray;
116 typedef jarray jobjectArray;
117
118 #endif
119
120 typedef jobject jweak;
121
122 typedef union jvalue {
123 jboolean z;
124 jbyte b;
125 jchar c;
126 jshort s;
127 jint i;
128 jlong j;
129 jfloat f;
130 jdouble d;
131 jobject l;
132 } jvalue;
133
134 struct _jfieldID;
135 typedef struct _jfieldID *jfieldID;
136
137 struct _jmethodID;
138 typedef struct _jmethodID *jmethodID;
139
140 /* Return values from jobjectRefType */
141 typedef enum _jobjectType {
142 JNIInvalidRefType = 0,
143 JNILocalRefType = 1,
144 JNIGlobalRefType = 2,
145 JNIWeakGlobalRefType = 3
146 } jobjectRefType;
147
148
149 #endif /* JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H */
150
151 /*
152 * jboolean constants
153 */
154
155 #define JNI_FALSE 0
156 #define JNI_TRUE 1
157
158 /*
159 * possible return values for JNI functions.
160 */
161
162 #define JNI_OK 0 /* success */
163 #define JNI_ERR (-1) /* unknown error */
164 #define JNI_EDETACHED (-2) /* thread detached from the VM */
165 #define JNI_EVERSION (-3) /* JNI version error */
166 #define JNI_ENOMEM (-4) /* not enough memory */
167 #define JNI_EEXIST (-5) /* VM already created */
168 #define JNI_EINVAL (-6) /* invalid arguments */
169
170 /*
171 * used in ReleaseScalarArrayElements
172 */
173
174 #define JNI_COMMIT 1
175 #define JNI_ABORT 2
176
177 /*
178 * used in RegisterNatives to describe native method name, signature,
179 * and function pointer.
180 */
181
182 typedef struct {
183 char *name;
184 char *signature;
185 void *fnPtr;
186 } JNINativeMethod;
187
188 /*
189 * JNI Native Method Interface.
190 */
191
192 struct JNINativeInterface_;
193
194 struct JNIEnv_;
195
196 #ifdef __cplusplus
197 typedef JNIEnv_ JNIEnv;
198 #else
199 typedef const struct JNINativeInterface_ *JNIEnv;
200 #endif
201
202 /*
203 * JNI Invocation Interface.
204 */
205
206 struct JNIInvokeInterface_;
207
208 struct JavaVM_;
209
210 #ifdef __cplusplus
211 typedef JavaVM_ JavaVM;
212 #else
213 typedef const struct JNIInvokeInterface_ *JavaVM;
214 #endif
215
216 struct JNINativeInterface_ {
217 void *reserved0;
218 void *reserved1;
219 void *reserved2;
220
221 void *reserved3;
222 jint (JNICALL *GetVersion)(JNIEnv *env);
223
224 jclass (JNICALL *DefineClass)
225 (JNIEnv *env, const char *name, jobject loader, const jbyte *buf,
226 jsize len);
227 jclass (JNICALL *FindClass)
228 (JNIEnv *env, const char *name);
229
230 jmethodID (JNICALL *FromReflectedMethod)
231 (JNIEnv *env, jobject method);
232 jfieldID (JNICALL *FromReflectedField)
233 (JNIEnv *env, jobject field);
234
235 jobject (JNICALL *ToReflectedMethod)
236 (JNIEnv *env, jclass cls, jmethodID methodID, jboolean isStatic);
237
238 jclass (JNICALL *GetSuperclass)
239 (JNIEnv *env, jclass sub);
240 jboolean (JNICALL *IsAssignableFrom)
241 (JNIEnv *env, jclass sub, jclass sup);
242
243 jobject (JNICALL *ToReflectedField)
244 (JNIEnv *env, jclass cls, jfieldID fieldID, jboolean isStatic);
245
246 jint (JNICALL *Throw)
247 (JNIEnv *env, jthrowable obj);
248 jint (JNICALL *ThrowNew)
249 (JNIEnv *env, jclass clazz, const char *msg);
250 jthrowable (JNICALL *ExceptionOccurred)
251 (JNIEnv *env);
252 void (JNICALL *ExceptionDescribe)
253 (JNIEnv *env);
254 void (JNICALL *ExceptionClear)
255 (JNIEnv *env);
256 void (JNICALL *FatalError)
257 (JNIEnv *env, const char *msg);
258
259 jint (JNICALL *PushLocalFrame)
260 (JNIEnv *env, jint capacity);
261 jobject (JNICALL *PopLocalFrame)
262 (JNIEnv *env, jobject result);
263
264 jobject (JNICALL *NewGlobalRef)
265 (JNIEnv *env, jobject lobj);
266 void (JNICALL *DeleteGlobalRef)
267 (JNIEnv *env, jobject gref);
268 void (JNICALL *DeleteLocalRef)
269 (JNIEnv *env, jobject obj);
270 jboolean (JNICALL *IsSameObject)
271 (JNIEnv *env, jobject obj1, jobject obj2);
272 jobject (JNICALL *NewLocalRef)
273 (JNIEnv *env, jobject ref);
274 jint (JNICALL *EnsureLocalCapacity)
275 (JNIEnv *env, jint capacity);
276
277 jobject (JNICALL *AllocObject)
278 (JNIEnv *env, jclass clazz);
279 jobject (JNICALL *NewObject)
280 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
281 jobject (JNICALL *NewObjectV)
282 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
283 jobject (JNICALL *NewObjectA)
284 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
285
286 jclass (JNICALL *GetObjectClass)
287 (JNIEnv *env, jobject obj);
288 jboolean (JNICALL *IsInstanceOf)
289 (JNIEnv *env, jobject obj, jclass clazz);
290
291 jmethodID (JNICALL *GetMethodID)
292 (JNIEnv *env, jclass clazz, const char *name, const char *sig);
293
294 jobject (JNICALL *CallObjectMethod)
295 (JNIEnv *env, jobject obj, jmethodID methodID, ...);
296 jobject (JNICALL *CallObjectMethodV)
297 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
298 jobject (JNICALL *CallObjectMethodA)
299 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
300
301 jboolean (JNICALL *CallBooleanMethod)
302 (JNIEnv *env, jobject obj, jmethodID methodID, ...);
303 jboolean (JNICALL *CallBooleanMethodV)
304 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
305 jboolean (JNICALL *CallBooleanMethodA)
306 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
307
308 jbyte (JNICALL *CallByteMethod)
309 (JNIEnv *env, jobject obj, jmethodID methodID, ...);
310 jbyte (JNICALL *CallByteMethodV)
311 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
312 jbyte (JNICALL *CallByteMethodA)
313 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
314
315 jchar (JNICALL *CallCharMethod)
316 (JNIEnv *env, jobject obj, jmethodID methodID, ...);
317 jchar (JNICALL *CallCharMethodV)
318 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
319 jchar (JNICALL *CallCharMethodA)
320 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
321
322 jshort (JNICALL *CallShortMethod)
323 (JNIEnv *env, jobject obj, jmethodID methodID, ...);
324 jshort (JNICALL *CallShortMethodV)
325 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
326 jshort (JNICALL *CallShortMethodA)
327 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
328
329 jint (JNICALL *CallIntMethod)
330 (JNIEnv *env, jobject obj, jmethodID methodID, ...);
331 jint (JNICALL *CallIntMethodV)
332 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
333 jint (JNICALL *CallIntMethodA)
334 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
335
336 jlong (JNICALL *CallLongMethod)
337 (JNIEnv *env, jobject obj, jmethodID methodID, ...);
338 jlong (JNICALL *CallLongMethodV)
339 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
340 jlong (JNICALL *CallLongMethodA)
341 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
342
343 jfloat (JNICALL *CallFloatMethod)
344 (JNIEnv *env, jobject obj, jmethodID methodID, ...);
345 jfloat (JNICALL *CallFloatMethodV)
346 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
347 jfloat (JNICALL *CallFloatMethodA)
348 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
349
350 jdouble (JNICALL *CallDoubleMethod)
351 (JNIEnv *env, jobject obj, jmethodID methodID, ...);
352 jdouble (JNICALL *CallDoubleMethodV)
353 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
354 jdouble (JNICALL *CallDoubleMethodA)
355 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
356
357 void (JNICALL *CallVoidMethod)
358 (JNIEnv *env, jobject obj, jmethodID methodID, ...);
359 void (JNICALL *CallVoidMethodV)
360 (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
361 void (JNICALL *CallVoidMethodA)
362 (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
363
364 jobject (JNICALL *CallNonvirtualObjectMethod)
365 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
366 jobject (JNICALL *CallNonvirtualObjectMethodV)
367 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
368 va_list args);
369 jobject (JNICALL *CallNonvirtualObjectMethodA)
370 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
371 const jvalue * args);
372
373 jboolean (JNICALL *CallNonvirtualBooleanMethod)
374 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
375 jboolean (JNICALL *CallNonvirtualBooleanMethodV)
376 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
377 va_list args);
378 jboolean (JNICALL *CallNonvirtualBooleanMethodA)
379 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
380 const jvalue * args);
381
382 jbyte (JNICALL *CallNonvirtualByteMethod)
383 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
384 jbyte (JNICALL *CallNonvirtualByteMethodV)
385 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
386 va_list args);
387 jbyte (JNICALL *CallNonvirtualByteMethodA)
388 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
389 const jvalue *args);
390
391 jchar (JNICALL *CallNonvirtualCharMethod)
392 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
393 jchar (JNICALL *CallNonvirtualCharMethodV)
394 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
395 va_list args);
396 jchar (JNICALL *CallNonvirtualCharMethodA)
397 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
398 const jvalue *args);
399
400 jshort (JNICALL *CallNonvirtualShortMethod)
401 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
402 jshort (JNICALL *CallNonvirtualShortMethodV)
403 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
404 va_list args);
405 jshort (JNICALL *CallNonvirtualShortMethodA)
406 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
407 const jvalue *args);
408
409 jint (JNICALL *CallNonvirtualIntMethod)
410 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
411 jint (JNICALL *CallNonvirtualIntMethodV)
412 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
413 va_list args);
414 jint (JNICALL *CallNonvirtualIntMethodA)
415 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
416 const jvalue *args);
417
418 jlong (JNICALL *CallNonvirtualLongMethod)
419 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
420 jlong (JNICALL *CallNonvirtualLongMethodV)
421 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
422 va_list args);
423 jlong (JNICALL *CallNonvirtualLongMethodA)
424 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
425 const jvalue *args);
426
427 jfloat (JNICALL *CallNonvirtualFloatMethod)
428 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
429 jfloat (JNICALL *CallNonvirtualFloatMethodV)
430 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
431 va_list args);
432 jfloat (JNICALL *CallNonvirtualFloatMethodA)
433 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
434 const jvalue *args);
435
436 jdouble (JNICALL *CallNonvirtualDoubleMethod)
437 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
438 jdouble (JNICALL *CallNonvirtualDoubleMethodV)
439 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
440 va_list args);
441 jdouble (JNICALL *CallNonvirtualDoubleMethodA)
442 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
443 const jvalue *args);
444
445 void (JNICALL *CallNonvirtualVoidMethod)
446 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
447 void (JNICALL *CallNonvirtualVoidMethodV)
448 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
449 va_list args);
450 void (JNICALL *CallNonvirtualVoidMethodA)
451 (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
452 const jvalue * args);
453
454 jfieldID (JNICALL *GetFieldID)
455 (JNIEnv *env, jclass clazz, const char *name, const char *sig);
456
457 jobject (JNICALL *GetObjectField)
458 (JNIEnv *env, jobject obj, jfieldID fieldID);
459 jboolean (JNICALL *GetBooleanField)
460 (JNIEnv *env, jobject obj, jfieldID fieldID);
461 jbyte (JNICALL *GetByteField)
462 (JNIEnv *env, jobject obj, jfieldID fieldID);
463 jchar (JNICALL *GetCharField)
464 (JNIEnv *env, jobject obj, jfieldID fieldID);
465 jshort (JNICALL *GetShortField)
466 (JNIEnv *env, jobject obj, jfieldID fieldID);
467 jint (JNICALL *GetIntField)
468 (JNIEnv *env, jobject obj, jfieldID fieldID);
469 jlong (JNICALL *GetLongField)
470 (JNIEnv *env, jobject obj, jfieldID fieldID);
471 jfloat (JNICALL *GetFloatField)
472 (JNIEnv *env, jobject obj, jfieldID fieldID);
473 jdouble (JNICALL *GetDoubleField)
474 (JNIEnv *env, jobject obj, jfieldID fieldID);
475
476 void (JNICALL *SetObjectField)
477 (JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);
478 void (JNICALL *SetBooleanField)
479 (JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);
480 void (JNICALL *SetByteField)
481 (JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);
482 void (JNICALL *SetCharField)
483 (JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);
484 void (JNICALL *SetShortField)
485 (JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);
486 void (JNICALL *SetIntField)
487 (JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
488 void (JNICALL *SetLongField)
489 (JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);
490 void (JNICALL *SetFloatField)
491 (JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);
492 void (JNICALL *SetDoubleField)
493 (JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);
494
495 jmethodID (JNICALL *GetStaticMethodID)
496 (JNIEnv *env, jclass clazz, const char *name, const char *sig);
497
498 jobject (JNICALL *CallStaticObjectMethod)
499 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
500 jobject (JNICALL *CallStaticObjectMethodV)
501 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
502 jobject (JNICALL *CallStaticObjectMethodA)
503 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
504
505 jboolean (JNICALL *CallStaticBooleanMethod)
506 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
507 jboolean (JNICALL *CallStaticBooleanMethodV)
508 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
509 jboolean (JNICALL *CallStaticBooleanMethodA)
510 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
511
512 jbyte (JNICALL *CallStaticByteMethod)
513 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
514 jbyte (JNICALL *CallStaticByteMethodV)
515 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
516 jbyte (JNICALL *CallStaticByteMethodA)
517 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
518
519 jchar (JNICALL *CallStaticCharMethod)
520 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
521 jchar (JNICALL *CallStaticCharMethodV)
522 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
523 jchar (JNICALL *CallStaticCharMethodA)
524 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
525
526 jshort (JNICALL *CallStaticShortMethod)
527 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
528 jshort (JNICALL *CallStaticShortMethodV)
529 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
530 jshort (JNICALL *CallStaticShortMethodA)
531 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
532
533 jint (JNICALL *CallStaticIntMethod)
534 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
535 jint (JNICALL *CallStaticIntMethodV)
536 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
537 jint (JNICALL *CallStaticIntMethodA)
538 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
539
540 jlong (JNICALL *CallStaticLongMethod)
541 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
542 jlong (JNICALL *CallStaticLongMethodV)
543 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
544 jlong (JNICALL *CallStaticLongMethodA)
545 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
546
547 jfloat (JNICALL *CallStaticFloatMethod)
548 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
549 jfloat (JNICALL *CallStaticFloatMethodV)
550 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
551 jfloat (JNICALL *CallStaticFloatMethodA)
552 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
553
554 jdouble (JNICALL *CallStaticDoubleMethod)
555 (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
556 jdouble (JNICALL *CallStaticDoubleMethodV)
557 (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
558 jdouble (JNICALL *CallStaticDoubleMethodA)
559 (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
560
561 void (JNICALL *CallStaticVoidMethod)
562 (JNIEnv *env, jclass cls, jmethodID methodID, ...);
563 void (JNICALL *CallStaticVoidMethodV)
564 (JNIEnv *env, jclass cls, jmethodID methodID, va_list args);
565 void (JNICALL *CallStaticVoidMethodA)
566 (JNIEnv *env, jclass cls, jmethodID methodID, const jvalue * args);
567
568 jfieldID (JNICALL *GetStaticFieldID)
569 (JNIEnv *env, jclass clazz, const char *name, const char *sig);
570 jobject (JNICALL *GetStaticObjectField)
571 (JNIEnv *env, jclass clazz, jfieldID fieldID);
572 jboolean (JNICALL *GetStaticBooleanField)
573 (JNIEnv *env, jclass clazz, jfieldID fieldID);
574 jbyte (JNICALL *GetStaticByteField)
575 (JNIEnv *env, jclass clazz, jfieldID fieldID);
576 jchar (JNICALL *GetStaticCharField)
577 (JNIEnv *env, jclass clazz, jfieldID fieldID);
578 jshort (JNICALL *GetStaticShortField)
579 (JNIEnv *env, jclass clazz, jfieldID fieldID);
580 jint (JNICALL *GetStaticIntField)
581 (JNIEnv *env, jclass clazz, jfieldID fieldID);
582 jlong (JNICALL *GetStaticLongField)
583 (JNIEnv *env, jclass clazz, jfieldID fieldID);
584 jfloat (JNICALL *GetStaticFloatField)
585 (JNIEnv *env, jclass clazz, jfieldID fieldID);
586 jdouble (JNICALL *GetStaticDoubleField)
587 (JNIEnv *env, jclass clazz, jfieldID fieldID);
588
589 void (JNICALL *SetStaticObjectField)
590 (JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value);
591 void (JNICALL *SetStaticBooleanField)
592 (JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value);
593 void (JNICALL *SetStaticByteField)
594 (JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value);
595 void (JNICALL *SetStaticCharField)
596 (JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value);
597 void (JNICALL *SetStaticShortField)
598 (JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value);
599 void (JNICALL *SetStaticIntField)
600 (JNIEnv *env, jclass clazz, jfieldID fieldID, jint value);
601 void (JNICALL *SetStaticLongField)
602 (JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value);
603 void (JNICALL *SetStaticFloatField)
604 (JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value);
605 void (JNICALL *SetStaticDoubleField)
606 (JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value);
607
608 jstring (JNICALL *NewString)
609 (JNIEnv *env, const jchar *unicode, jsize len);
610 jsize (JNICALL *GetStringLength)
611 (JNIEnv *env, jstring str);
612 const jchar *(JNICALL *GetStringChars)
613 (JNIEnv *env, jstring str, jboolean *isCopy);
614 void (JNICALL *ReleaseStringChars)
615 (JNIEnv *env, jstring str, const jchar *chars);
616
617 jstring (JNICALL *NewStringUTF)
618 (JNIEnv *env, const char *utf);
619 jsize (JNICALL *GetStringUTFLength)
620 (JNIEnv *env, jstring str);
621 const char* (JNICALL *GetStringUTFChars)
622 (JNIEnv *env, jstring str, jboolean *isCopy);
623 void (JNICALL *ReleaseStringUTFChars)
624 (JNIEnv *env, jstring str, const char* chars);
625
626
627 jsize (JNICALL *GetArrayLength)
628 (JNIEnv *env, jarray array);
629
630 jobjectArray (JNICALL *NewObjectArray)
631 (JNIEnv *env, jsize len, jclass clazz, jobject init);
632 jobject (JNICALL *GetObjectArrayElement)
633 (JNIEnv *env, jobjectArray array, jsize index);
634 void (JNICALL *SetObjectArrayElement)
635 (JNIEnv *env, jobjectArray array, jsize index, jobject val);
636
637 jbooleanArray (JNICALL *NewBooleanArray)
638 (JNIEnv *env, jsize len);
639 jbyteArray (JNICALL *NewByteArray)
640 (JNIEnv *env, jsize len);
641 jcharArray (JNICALL *NewCharArray)
642 (JNIEnv *env, jsize len);
643 jshortArray (JNICALL *NewShortArray)
644 (JNIEnv *env, jsize len);
645 jintArray (JNICALL *NewIntArray)
646 (JNIEnv *env, jsize len);
647 jlongArray (JNICALL *NewLongArray)
648 (JNIEnv *env, jsize len);
649 jfloatArray (JNICALL *NewFloatArray)
650 (JNIEnv *env, jsize len);
651 jdoubleArray (JNICALL *NewDoubleArray)
652 (JNIEnv *env, jsize len);
653
654 jboolean * (JNICALL *GetBooleanArrayElements)
655 (JNIEnv *env, jbooleanArray array, jboolean *isCopy);
656 jbyte * (JNICALL *GetByteArrayElements)
657 (JNIEnv *env, jbyteArray array, jboolean *isCopy);
658 jchar * (JNICALL *GetCharArrayElements)
659 (JNIEnv *env, jcharArray array, jboolean *isCopy);
660 jshort * (JNICALL *GetShortArrayElements)
661 (JNIEnv *env, jshortArray array, jboolean *isCopy);
662 jint * (JNICALL *GetIntArrayElements)
663 (JNIEnv *env, jintArray array, jboolean *isCopy);
664 jlong * (JNICALL *GetLongArrayElements)
665 (JNIEnv *env, jlongArray array, jboolean *isCopy);
666 jfloat * (JNICALL *GetFloatArrayElements)
667 (JNIEnv *env, jfloatArray array, jboolean *isCopy);
668 jdouble * (JNICALL *GetDoubleArrayElements)
669 (JNIEnv *env, jdoubleArray array, jboolean *isCopy);
670
671 void (JNICALL *ReleaseBooleanArrayElements)
672 (JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode);
673 void (JNICALL *ReleaseByteArrayElements)
674 (JNIEnv *env, jbyteArray array, jbyte *elems, jint mode);
675 void (JNICALL *ReleaseCharArrayElements)
676 (JNIEnv *env, jcharArray array, jchar *elems, jint mode);
677 void (JNICALL *ReleaseShortArrayElements)
678 (JNIEnv *env, jshortArray array, jshort *elems, jint mode);
679 void (JNICALL *ReleaseIntArrayElements)
680 (JNIEnv *env, jintArray array, jint *elems, jint mode);
681 void (JNICALL *ReleaseLongArrayElements)
682 (JNIEnv *env, jlongArray array, jlong *elems, jint mode);
683 void (JNICALL *ReleaseFloatArrayElements)
684 (JNIEnv *env, jfloatArray array, jfloat *elems, jint mode);
685 void (JNICALL *ReleaseDoubleArrayElements)
686 (JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode);
687
688 void (JNICALL *GetBooleanArrayRegion)
689 (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);
690 void (JNICALL *GetByteArrayRegion)
691 (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);
692 void (JNICALL *GetCharArrayRegion)
693 (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);
694 void (JNICALL *GetShortArrayRegion)
695 (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);
696 void (JNICALL *GetIntArrayRegion)
697 (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);
698 void (JNICALL *GetLongArrayRegion)
699 (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);
700 void (JNICALL *GetFloatArrayRegion)
701 (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);
702 void (JNICALL *GetDoubleArrayRegion)
703 (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);
704
705 void (JNICALL *SetBooleanArrayRegion)
706 (JNIEnv *env, jbooleanArray array, jsize start, jsize l, const jboolean *buf);
707 void (JNICALL *SetByteArrayRegion)
708 (JNIEnv *env, jbyteArray array, jsize start, jsize len, const jbyte *buf);
709 void (JNICALL *SetCharArrayRegion)
710 (JNIEnv *env, jcharArray array, jsize start, jsize len, const jchar *buf);
711 void (JNICALL *SetShortArrayRegion)
712 (JNIEnv *env, jshortArray array, jsize start, jsize len, const jshort *buf);
713 void (JNICALL *SetIntArrayRegion)
714 (JNIEnv *env, jintArray array, jsize start, jsize len, const jint *buf);
715 void (JNICALL *SetLongArrayRegion)
716 (JNIEnv *env, jlongArray array, jsize start, jsize len, const jlong *buf);
717 void (JNICALL *SetFloatArrayRegion)
718 (JNIEnv *env, jfloatArray array, jsize start, jsize len, const jfloat *buf);
719 void (JNICALL *SetDoubleArrayRegion)
720 (JNIEnv *env, jdoubleArray array, jsize start, jsize len, const jdouble *buf);
721
722 jint (JNICALL *RegisterNatives)
723 (JNIEnv *env, jclass clazz, const JNINativeMethod *methods,
724 jint nMethods);
725 jint (JNICALL *UnregisterNatives)
726 (JNIEnv *env, jclass clazz);
727
728 jint (JNICALL *MonitorEnter)
729 (JNIEnv *env, jobject obj);
730 jint (JNICALL *MonitorExit)
731 (JNIEnv *env, jobject obj);
732
733 jint (JNICALL *GetJavaVM)
734 (JNIEnv *env, JavaVM **vm);
735
736 void (JNICALL *GetStringRegion)
737 (JNIEnv *env, jstring str, jsize start, jsize len, jchar *buf);
738 void (JNICALL *GetStringUTFRegion)
739 (JNIEnv *env, jstring str, jsize start, jsize len, char *buf);
740
741 void * (JNICALL *GetPrimitiveArrayCritical)
742 (JNIEnv *env, jarray array, jboolean *isCopy);
743 void (JNICALL *ReleasePrimitiveArrayCritical)
744 (JNIEnv *env, jarray array, void *carray, jint mode);
745
746 const jchar * (JNICALL *GetStringCritical)
747 (JNIEnv *env, jstring string, jboolean *isCopy);
748 void (JNICALL *ReleaseStringCritical)
749 (JNIEnv *env, jstring string, const jchar *cstring);
750
751 jweak (JNICALL *NewWeakGlobalRef)
752 (JNIEnv *env, jobject obj);
753 void (JNICALL *DeleteWeakGlobalRef)
754 (JNIEnv *env, jweak ref);
755
756 jboolean (JNICALL *ExceptionCheck)
757 (JNIEnv *env);
758
759 jobject (JNICALL *NewDirectByteBuffer)
760 (JNIEnv* env, void* address, jlong capacity);
761 void* (JNICALL *GetDirectBufferAddress)
762 (JNIEnv* env, jobject buf);
763 jlong (JNICALL *GetDirectBufferCapacity)
764 (JNIEnv* env, jobject buf);
765
766 /* New JNI 1.6 Features */
767
768 jobjectRefType (JNICALL *GetObjectRefType)
769 (JNIEnv* env, jobject obj);
770
771 /* Module Features */
772
773 jobject (JNICALL *GetModule)
774 (JNIEnv* env, jclass clazz);
775
776 /* Virtual threads */
777
778 jboolean (JNICALL *IsVirtualThread)
779 (JNIEnv* env, jobject obj);
780
781 /* Large UTF8 Support */
782
783 jlong (JNICALL *GetStringUTFLengthAsLong)
784 (JNIEnv *env, jstring str);
785
786 /* Value classes */
787
788 jboolean (JNICALL *IsValueObject)
789 (JNIEnv* env, jobject obj);
790
791 };
792
793 /*
794 * We use inlined functions for C++ so that programmers can write:
795 *
796 * env->FindClass("java/lang/String")
797 *
798 * in C++ rather than:
799 *
800 * (*env)->FindClass(env, "java/lang/String")
801 *
802 * in C.
803 */
804
805 struct JNIEnv_ {
806 const struct JNINativeInterface_ *functions;
807 #ifdef __cplusplus
808
809 jint GetVersion() {
810 return functions->GetVersion(this);
811 }
812 jclass DefineClass(const char *name, jobject loader, const jbyte *buf,
813 jsize len) {
814 return functions->DefineClass(this, name, loader, buf, len);
815 }
816 jclass FindClass(const char *name) {
817 return functions->FindClass(this, name);
818 }
819 jmethodID FromReflectedMethod(jobject method) {
820 return functions->FromReflectedMethod(this,method);
821 }
822 jfieldID FromReflectedField(jobject field) {
823 return functions->FromReflectedField(this,field);
824 }
825
826 jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic) {
827 return functions->ToReflectedMethod(this, cls, methodID, isStatic);
828 }
829
830 jclass GetSuperclass(jclass sub) {
831 return functions->GetSuperclass(this, sub);
832 }
833 jboolean IsAssignableFrom(jclass sub, jclass sup) {
834 return functions->IsAssignableFrom(this, sub, sup);
835 }
836
837 jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic) {
838 return functions->ToReflectedField(this,cls,fieldID,isStatic);
839 }
840
841 jint Throw(jthrowable obj) {
842 return functions->Throw(this, obj);
843 }
844 jint ThrowNew(jclass clazz, const char *msg) {
845 return functions->ThrowNew(this, clazz, msg);
846 }
847 jthrowable ExceptionOccurred() {
848 return functions->ExceptionOccurred(this);
849 }
850 void ExceptionDescribe() {
851 functions->ExceptionDescribe(this);
852 }
853 void ExceptionClear() {
854 functions->ExceptionClear(this);
855 }
856 void FatalError(const char *msg) {
857 functions->FatalError(this, msg);
858 }
859
860 jint PushLocalFrame(jint capacity) {
861 return functions->PushLocalFrame(this,capacity);
862 }
863 jobject PopLocalFrame(jobject result) {
864 return functions->PopLocalFrame(this,result);
865 }
866
867 jobject NewGlobalRef(jobject lobj) {
868 return functions->NewGlobalRef(this,lobj);
869 }
870 void DeleteGlobalRef(jobject gref) {
871 functions->DeleteGlobalRef(this,gref);
872 }
873 void DeleteLocalRef(jobject obj) {
874 functions->DeleteLocalRef(this, obj);
875 }
876
877 jboolean IsSameObject(jobject obj1, jobject obj2) {
878 return functions->IsSameObject(this,obj1,obj2);
879 }
880
881 jobject NewLocalRef(jobject ref) {
882 return functions->NewLocalRef(this,ref);
883 }
884 jint EnsureLocalCapacity(jint capacity) {
885 return functions->EnsureLocalCapacity(this,capacity);
886 }
887
888 jobject AllocObject(jclass clazz) {
889 return functions->AllocObject(this,clazz);
890 }
891 jobject NewObject(jclass clazz, jmethodID methodID, ...) {
892 va_list args;
893 jobject result;
894 va_start(args, methodID);
895 result = functions->NewObjectV(this,clazz,methodID,args);
896 va_end(args);
897 return result;
898 }
899 jobject NewObjectV(jclass clazz, jmethodID methodID,
900 va_list args) {
901 return functions->NewObjectV(this,clazz,methodID,args);
902 }
903 jobject NewObjectA(jclass clazz, jmethodID methodID,
904 const jvalue *args) {
905 return functions->NewObjectA(this,clazz,methodID,args);
906 }
907
908 jclass GetObjectClass(jobject obj) {
909 return functions->GetObjectClass(this,obj);
910 }
911 jboolean IsInstanceOf(jobject obj, jclass clazz) {
912 return functions->IsInstanceOf(this,obj,clazz);
913 }
914
915 jmethodID GetMethodID(jclass clazz, const char *name,
916 const char *sig) {
917 return functions->GetMethodID(this,clazz,name,sig);
918 }
919
920 jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {
921 va_list args;
922 jobject result;
923 va_start(args,methodID);
924 result = functions->CallObjectMethodV(this,obj,methodID,args);
925 va_end(args);
926 return result;
927 }
928 jobject CallObjectMethodV(jobject obj, jmethodID methodID,
929 va_list args) {
930 return functions->CallObjectMethodV(this,obj,methodID,args);
931 }
932 jobject CallObjectMethodA(jobject obj, jmethodID methodID,
933 const jvalue * args) {
934 return functions->CallObjectMethodA(this,obj,methodID,args);
935 }
936
937 jboolean CallBooleanMethod(jobject obj,
938 jmethodID methodID, ...) {
939 va_list args;
940 jboolean result;
941 va_start(args,methodID);
942 result = functions->CallBooleanMethodV(this,obj,methodID,args);
943 va_end(args);
944 return result;
945 }
946 jboolean CallBooleanMethodV(jobject obj, jmethodID methodID,
947 va_list args) {
948 return functions->CallBooleanMethodV(this,obj,methodID,args);
949 }
950 jboolean CallBooleanMethodA(jobject obj, jmethodID methodID,
951 const jvalue * args) {
952 return functions->CallBooleanMethodA(this,obj,methodID, args);
953 }
954
955 jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {
956 va_list args;
957 jbyte result;
958 va_start(args,methodID);
959 result = functions->CallByteMethodV(this,obj,methodID,args);
960 va_end(args);
961 return result;
962 }
963 jbyte CallByteMethodV(jobject obj, jmethodID methodID,
964 va_list args) {
965 return functions->CallByteMethodV(this,obj,methodID,args);
966 }
967 jbyte CallByteMethodA(jobject obj, jmethodID methodID,
968 const jvalue * args) {
969 return functions->CallByteMethodA(this,obj,methodID,args);
970 }
971
972 jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {
973 va_list args;
974 jchar result;
975 va_start(args,methodID);
976 result = functions->CallCharMethodV(this,obj,methodID,args);
977 va_end(args);
978 return result;
979 }
980 jchar CallCharMethodV(jobject obj, jmethodID methodID,
981 va_list args) {
982 return functions->CallCharMethodV(this,obj,methodID,args);
983 }
984 jchar CallCharMethodA(jobject obj, jmethodID methodID,
985 const jvalue * args) {
986 return functions->CallCharMethodA(this,obj,methodID,args);
987 }
988
989 jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {
990 va_list args;
991 jshort result;
992 va_start(args,methodID);
993 result = functions->CallShortMethodV(this,obj,methodID,args);
994 va_end(args);
995 return result;
996 }
997 jshort CallShortMethodV(jobject obj, jmethodID methodID,
998 va_list args) {
999 return functions->CallShortMethodV(this,obj,methodID,args);
1000 }
1001 jshort CallShortMethodA(jobject obj, jmethodID methodID,
1002 const jvalue * args) {
1003 return functions->CallShortMethodA(this,obj,methodID,args);
1004 }
1005
1006 jint CallIntMethod(jobject obj, jmethodID methodID, ...) {
1007 va_list args;
1008 jint result;
1009 va_start(args,methodID);
1010 result = functions->CallIntMethodV(this,obj,methodID,args);
1011 va_end(args);
1012 return result;
1013 }
1014 jint CallIntMethodV(jobject obj, jmethodID methodID,
1015 va_list args) {
1016 return functions->CallIntMethodV(this,obj,methodID,args);
1017 }
1018 jint CallIntMethodA(jobject obj, jmethodID methodID,
1019 const jvalue * args) {
1020 return functions->CallIntMethodA(this,obj,methodID,args);
1021 }
1022
1023 jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {
1024 va_list args;
1025 jlong result;
1026 va_start(args,methodID);
1027 result = functions->CallLongMethodV(this,obj,methodID,args);
1028 va_end(args);
1029 return result;
1030 }
1031 jlong CallLongMethodV(jobject obj, jmethodID methodID,
1032 va_list args) {
1033 return functions->CallLongMethodV(this,obj,methodID,args);
1034 }
1035 jlong CallLongMethodA(jobject obj, jmethodID methodID,
1036 const jvalue * args) {
1037 return functions->CallLongMethodA(this,obj,methodID,args);
1038 }
1039
1040 jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {
1041 va_list args;
1042 jfloat result;
1043 va_start(args,methodID);
1044 result = functions->CallFloatMethodV(this,obj,methodID,args);
1045 va_end(args);
1046 return result;
1047 }
1048 jfloat CallFloatMethodV(jobject obj, jmethodID methodID,
1049 va_list args) {
1050 return functions->CallFloatMethodV(this,obj,methodID,args);
1051 }
1052 jfloat CallFloatMethodA(jobject obj, jmethodID methodID,
1053 const jvalue * args) {
1054 return functions->CallFloatMethodA(this,obj,methodID,args);
1055 }
1056
1057 jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {
1058 va_list args;
1059 jdouble result;
1060 va_start(args,methodID);
1061 result = functions->CallDoubleMethodV(this,obj,methodID,args);
1062 va_end(args);
1063 return result;
1064 }
1065 jdouble CallDoubleMethodV(jobject obj, jmethodID methodID,
1066 va_list args) {
1067 return functions->CallDoubleMethodV(this,obj,methodID,args);
1068 }
1069 jdouble CallDoubleMethodA(jobject obj, jmethodID methodID,
1070 const jvalue * args) {
1071 return functions->CallDoubleMethodA(this,obj,methodID,args);
1072 }
1073
1074 void CallVoidMethod(jobject obj, jmethodID methodID, ...) {
1075 va_list args;
1076 va_start(args,methodID);
1077 functions->CallVoidMethodV(this,obj,methodID,args);
1078 va_end(args);
1079 }
1080 void CallVoidMethodV(jobject obj, jmethodID methodID,
1081 va_list args) {
1082 functions->CallVoidMethodV(this,obj,methodID,args);
1083 }
1084 void CallVoidMethodA(jobject obj, jmethodID methodID,
1085 const jvalue * args) {
1086 functions->CallVoidMethodA(this,obj,methodID,args);
1087 }
1088
1089 jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz,
1090 jmethodID methodID, ...) {
1091 va_list args;
1092 jobject result;
1093 va_start(args,methodID);
1094 result = functions->CallNonvirtualObjectMethodV(this,obj,clazz,
1095 methodID,args);
1096 va_end(args);
1097 return result;
1098 }
1099 jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz,
1100 jmethodID methodID, va_list args) {
1101 return functions->CallNonvirtualObjectMethodV(this,obj,clazz,
1102 methodID,args);
1103 }
1104 jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz,
1105 jmethodID methodID, const jvalue * args) {
1106 return functions->CallNonvirtualObjectMethodA(this,obj,clazz,
1107 methodID,args);
1108 }
1109
1110 jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz,
1111 jmethodID methodID, ...) {
1112 va_list args;
1113 jboolean result;
1114 va_start(args,methodID);
1115 result = functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
1116 methodID,args);
1117 va_end(args);
1118 return result;
1119 }
1120 jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz,
1121 jmethodID methodID, va_list args) {
1122 return functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
1123 methodID,args);
1124 }
1125 jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz,
1126 jmethodID methodID, const jvalue * args) {
1127 return functions->CallNonvirtualBooleanMethodA(this,obj,clazz,
1128 methodID, args);
1129 }
1130
1131 jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz,
1132 jmethodID methodID, ...) {
1133 va_list args;
1134 jbyte result;
1135 va_start(args,methodID);
1136 result = functions->CallNonvirtualByteMethodV(this,obj,clazz,
1137 methodID,args);
1138 va_end(args);
1139 return result;
1140 }
1141 jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz,
1142 jmethodID methodID, va_list args) {
1143 return functions->CallNonvirtualByteMethodV(this,obj,clazz,
1144 methodID,args);
1145 }
1146 jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz,
1147 jmethodID methodID, const jvalue * args) {
1148 return functions->CallNonvirtualByteMethodA(this,obj,clazz,
1149 methodID,args);
1150 }
1151
1152 jchar CallNonvirtualCharMethod(jobject obj, jclass clazz,
1153 jmethodID methodID, ...) {
1154 va_list args;
1155 jchar result;
1156 va_start(args,methodID);
1157 result = functions->CallNonvirtualCharMethodV(this,obj,clazz,
1158 methodID,args);
1159 va_end(args);
1160 return result;
1161 }
1162 jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz,
1163 jmethodID methodID, va_list args) {
1164 return functions->CallNonvirtualCharMethodV(this,obj,clazz,
1165 methodID,args);
1166 }
1167 jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz,
1168 jmethodID methodID, const jvalue * args) {
1169 return functions->CallNonvirtualCharMethodA(this,obj,clazz,
1170 methodID,args);
1171 }
1172
1173 jshort CallNonvirtualShortMethod(jobject obj, jclass clazz,
1174 jmethodID methodID, ...) {
1175 va_list args;
1176 jshort result;
1177 va_start(args,methodID);
1178 result = functions->CallNonvirtualShortMethodV(this,obj,clazz,
1179 methodID,args);
1180 va_end(args);
1181 return result;
1182 }
1183 jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz,
1184 jmethodID methodID, va_list args) {
1185 return functions->CallNonvirtualShortMethodV(this,obj,clazz,
1186 methodID,args);
1187 }
1188 jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,
1189 jmethodID methodID, const jvalue * args) {
1190 return functions->CallNonvirtualShortMethodA(this,obj,clazz,
1191 methodID,args);
1192 }
1193
1194 jint CallNonvirtualIntMethod(jobject obj, jclass clazz,
1195 jmethodID methodID, ...) {
1196 va_list args;
1197 jint result;
1198 va_start(args,methodID);
1199 result = functions->CallNonvirtualIntMethodV(this,obj,clazz,
1200 methodID,args);
1201 va_end(args);
1202 return result;
1203 }
1204 jint CallNonvirtualIntMethodV(jobject obj, jclass clazz,
1205 jmethodID methodID, va_list args) {
1206 return functions->CallNonvirtualIntMethodV(this,obj,clazz,
1207 methodID,args);
1208 }
1209 jint CallNonvirtualIntMethodA(jobject obj, jclass clazz,
1210 jmethodID methodID, const jvalue * args) {
1211 return functions->CallNonvirtualIntMethodA(this,obj,clazz,
1212 methodID,args);
1213 }
1214
1215 jlong CallNonvirtualLongMethod(jobject obj, jclass clazz,
1216 jmethodID methodID, ...) {
1217 va_list args;
1218 jlong result;
1219 va_start(args,methodID);
1220 result = functions->CallNonvirtualLongMethodV(this,obj,clazz,
1221 methodID,args);
1222 va_end(args);
1223 return result;
1224 }
1225 jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz,
1226 jmethodID methodID, va_list args) {
1227 return functions->CallNonvirtualLongMethodV(this,obj,clazz,
1228 methodID,args);
1229 }
1230 jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz,
1231 jmethodID methodID, const jvalue * args) {
1232 return functions->CallNonvirtualLongMethodA(this,obj,clazz,
1233 methodID,args);
1234 }
1235
1236 jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz,
1237 jmethodID methodID, ...) {
1238 va_list args;
1239 jfloat result;
1240 va_start(args,methodID);
1241 result = functions->CallNonvirtualFloatMethodV(this,obj,clazz,
1242 methodID,args);
1243 va_end(args);
1244 return result;
1245 }
1246 jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz,
1247 jmethodID methodID,
1248 va_list args) {
1249 return functions->CallNonvirtualFloatMethodV(this,obj,clazz,
1250 methodID,args);
1251 }
1252 jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz,
1253 jmethodID methodID,
1254 const jvalue * args) {
1255 return functions->CallNonvirtualFloatMethodA(this,obj,clazz,
1256 methodID,args);
1257 }
1258
1259 jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz,
1260 jmethodID methodID, ...) {
1261 va_list args;
1262 jdouble result;
1263 va_start(args,methodID);
1264 result = functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
1265 methodID,args);
1266 va_end(args);
1267 return result;
1268 }
1269 jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz,
1270 jmethodID methodID,
1271 va_list args) {
1272 return functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
1273 methodID,args);
1274 }
1275 jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz,
1276 jmethodID methodID,
1277 const jvalue * args) {
1278 return functions->CallNonvirtualDoubleMethodA(this,obj,clazz,
1279 methodID,args);
1280 }
1281
1282 void CallNonvirtualVoidMethod(jobject obj, jclass clazz,
1283 jmethodID methodID, ...) {
1284 va_list args;
1285 va_start(args,methodID);
1286 functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
1287 va_end(args);
1288 }
1289 void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,
1290 jmethodID methodID,
1291 va_list args) {
1292 functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
1293 }
1294 void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,
1295 jmethodID methodID,
1296 const jvalue * args) {
1297 functions->CallNonvirtualVoidMethodA(this,obj,clazz,methodID,args);
1298 }
1299
1300 jfieldID GetFieldID(jclass clazz, const char *name,
1301 const char *sig) {
1302 return functions->GetFieldID(this,clazz,name,sig);
1303 }
1304
1305 jobject GetObjectField(jobject obj, jfieldID fieldID) {
1306 return functions->GetObjectField(this,obj,fieldID);
1307 }
1308 jboolean GetBooleanField(jobject obj, jfieldID fieldID) {
1309 return functions->GetBooleanField(this,obj,fieldID);
1310 }
1311 jbyte GetByteField(jobject obj, jfieldID fieldID) {
1312 return functions->GetByteField(this,obj,fieldID);
1313 }
1314 jchar GetCharField(jobject obj, jfieldID fieldID) {
1315 return functions->GetCharField(this,obj,fieldID);
1316 }
1317 jshort GetShortField(jobject obj, jfieldID fieldID) {
1318 return functions->GetShortField(this,obj,fieldID);
1319 }
1320 jint GetIntField(jobject obj, jfieldID fieldID) {
1321 return functions->GetIntField(this,obj,fieldID);
1322 }
1323 jlong GetLongField(jobject obj, jfieldID fieldID) {
1324 return functions->GetLongField(this,obj,fieldID);
1325 }
1326 jfloat GetFloatField(jobject obj, jfieldID fieldID) {
1327 return functions->GetFloatField(this,obj,fieldID);
1328 }
1329 jdouble GetDoubleField(jobject obj, jfieldID fieldID) {
1330 return functions->GetDoubleField(this,obj,fieldID);
1331 }
1332
1333 void SetObjectField(jobject obj, jfieldID fieldID, jobject val) {
1334 functions->SetObjectField(this,obj,fieldID,val);
1335 }
1336 void SetBooleanField(jobject obj, jfieldID fieldID,
1337 jboolean val) {
1338 functions->SetBooleanField(this,obj,fieldID,val);
1339 }
1340 void SetByteField(jobject obj, jfieldID fieldID,
1341 jbyte val) {
1342 functions->SetByteField(this,obj,fieldID,val);
1343 }
1344 void SetCharField(jobject obj, jfieldID fieldID,
1345 jchar val) {
1346 functions->SetCharField(this,obj,fieldID,val);
1347 }
1348 void SetShortField(jobject obj, jfieldID fieldID,
1349 jshort val) {
1350 functions->SetShortField(this,obj,fieldID,val);
1351 }
1352 void SetIntField(jobject obj, jfieldID fieldID,
1353 jint val) {
1354 functions->SetIntField(this,obj,fieldID,val);
1355 }
1356 void SetLongField(jobject obj, jfieldID fieldID,
1357 jlong val) {
1358 functions->SetLongField(this,obj,fieldID,val);
1359 }
1360 void SetFloatField(jobject obj, jfieldID fieldID,
1361 jfloat val) {
1362 functions->SetFloatField(this,obj,fieldID,val);
1363 }
1364 void SetDoubleField(jobject obj, jfieldID fieldID,
1365 jdouble val) {
1366 functions->SetDoubleField(this,obj,fieldID,val);
1367 }
1368
1369 jmethodID GetStaticMethodID(jclass clazz, const char *name,
1370 const char *sig) {
1371 return functions->GetStaticMethodID(this,clazz,name,sig);
1372 }
1373
1374 jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID,
1375 ...) {
1376 va_list args;
1377 jobject result;
1378 va_start(args,methodID);
1379 result = functions->CallStaticObjectMethodV(this,clazz,methodID,args);
1380 va_end(args);
1381 return result;
1382 }
1383 jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID,
1384 va_list args) {
1385 return functions->CallStaticObjectMethodV(this,clazz,methodID,args);
1386 }
1387 jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID,
1388 const jvalue *args) {
1389 return functions->CallStaticObjectMethodA(this,clazz,methodID,args);
1390 }
1391
1392 jboolean CallStaticBooleanMethod(jclass clazz,
1393 jmethodID methodID, ...) {
1394 va_list args;
1395 jboolean result;
1396 va_start(args,methodID);
1397 result = functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
1398 va_end(args);
1399 return result;
1400 }
1401 jboolean CallStaticBooleanMethodV(jclass clazz,
1402 jmethodID methodID, va_list args) {
1403 return functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
1404 }
1405 jboolean CallStaticBooleanMethodA(jclass clazz,
1406 jmethodID methodID, const jvalue *args) {
1407 return functions->CallStaticBooleanMethodA(this,clazz,methodID,args);
1408 }
1409
1410 jbyte CallStaticByteMethod(jclass clazz,
1411 jmethodID methodID, ...) {
1412 va_list args;
1413 jbyte result;
1414 va_start(args,methodID);
1415 result = functions->CallStaticByteMethodV(this,clazz,methodID,args);
1416 va_end(args);
1417 return result;
1418 }
1419 jbyte CallStaticByteMethodV(jclass clazz,
1420 jmethodID methodID, va_list args) {
1421 return functions->CallStaticByteMethodV(this,clazz,methodID,args);
1422 }
1423 jbyte CallStaticByteMethodA(jclass clazz,
1424 jmethodID methodID, const jvalue *args) {
1425 return functions->CallStaticByteMethodA(this,clazz,methodID,args);
1426 }
1427
1428 jchar CallStaticCharMethod(jclass clazz,
1429 jmethodID methodID, ...) {
1430 va_list args;
1431 jchar result;
1432 va_start(args,methodID);
1433 result = functions->CallStaticCharMethodV(this,clazz,methodID,args);
1434 va_end(args);
1435 return result;
1436 }
1437 jchar CallStaticCharMethodV(jclass clazz,
1438 jmethodID methodID, va_list args) {
1439 return functions->CallStaticCharMethodV(this,clazz,methodID,args);
1440 }
1441 jchar CallStaticCharMethodA(jclass clazz,
1442 jmethodID methodID, const jvalue *args) {
1443 return functions->CallStaticCharMethodA(this,clazz,methodID,args);
1444 }
1445
1446 jshort CallStaticShortMethod(jclass clazz,
1447 jmethodID methodID, ...) {
1448 va_list args;
1449 jshort result;
1450 va_start(args,methodID);
1451 result = functions->CallStaticShortMethodV(this,clazz,methodID,args);
1452 va_end(args);
1453 return result;
1454 }
1455 jshort CallStaticShortMethodV(jclass clazz,
1456 jmethodID methodID, va_list args) {
1457 return functions->CallStaticShortMethodV(this,clazz,methodID,args);
1458 }
1459 jshort CallStaticShortMethodA(jclass clazz,
1460 jmethodID methodID, const jvalue *args) {
1461 return functions->CallStaticShortMethodA(this,clazz,methodID,args);
1462 }
1463
1464 jint CallStaticIntMethod(jclass clazz,
1465 jmethodID methodID, ...) {
1466 va_list args;
1467 jint result;
1468 va_start(args,methodID);
1469 result = functions->CallStaticIntMethodV(this,clazz,methodID,args);
1470 va_end(args);
1471 return result;
1472 }
1473 jint CallStaticIntMethodV(jclass clazz,
1474 jmethodID methodID, va_list args) {
1475 return functions->CallStaticIntMethodV(this,clazz,methodID,args);
1476 }
1477 jint CallStaticIntMethodA(jclass clazz,
1478 jmethodID methodID, const jvalue *args) {
1479 return functions->CallStaticIntMethodA(this,clazz,methodID,args);
1480 }
1481
1482 jlong CallStaticLongMethod(jclass clazz,
1483 jmethodID methodID, ...) {
1484 va_list args;
1485 jlong result;
1486 va_start(args,methodID);
1487 result = functions->CallStaticLongMethodV(this,clazz,methodID,args);
1488 va_end(args);
1489 return result;
1490 }
1491 jlong CallStaticLongMethodV(jclass clazz,
1492 jmethodID methodID, va_list args) {
1493 return functions->CallStaticLongMethodV(this,clazz,methodID,args);
1494 }
1495 jlong CallStaticLongMethodA(jclass clazz,
1496 jmethodID methodID, const jvalue *args) {
1497 return functions->CallStaticLongMethodA(this,clazz,methodID,args);
1498 }
1499
1500 jfloat CallStaticFloatMethod(jclass clazz,
1501 jmethodID methodID, ...) {
1502 va_list args;
1503 jfloat result;
1504 va_start(args,methodID);
1505 result = functions->CallStaticFloatMethodV(this,clazz,methodID,args);
1506 va_end(args);
1507 return result;
1508 }
1509 jfloat CallStaticFloatMethodV(jclass clazz,
1510 jmethodID methodID, va_list args) {
1511 return functions->CallStaticFloatMethodV(this,clazz,methodID,args);
1512 }
1513 jfloat CallStaticFloatMethodA(jclass clazz,
1514 jmethodID methodID, const jvalue *args) {
1515 return functions->CallStaticFloatMethodA(this,clazz,methodID,args);
1516 }
1517
1518 jdouble CallStaticDoubleMethod(jclass clazz,
1519 jmethodID methodID, ...) {
1520 va_list args;
1521 jdouble result;
1522 va_start(args,methodID);
1523 result = functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
1524 va_end(args);
1525 return result;
1526 }
1527 jdouble CallStaticDoubleMethodV(jclass clazz,
1528 jmethodID methodID, va_list args) {
1529 return functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
1530 }
1531 jdouble CallStaticDoubleMethodA(jclass clazz,
1532 jmethodID methodID, const jvalue *args) {
1533 return functions->CallStaticDoubleMethodA(this,clazz,methodID,args);
1534 }
1535
1536 void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {
1537 va_list args;
1538 va_start(args,methodID);
1539 functions->CallStaticVoidMethodV(this,cls,methodID,args);
1540 va_end(args);
1541 }
1542 void CallStaticVoidMethodV(jclass cls, jmethodID methodID,
1543 va_list args) {
1544 functions->CallStaticVoidMethodV(this,cls,methodID,args);
1545 }
1546 void CallStaticVoidMethodA(jclass cls, jmethodID methodID,
1547 const jvalue * args) {
1548 functions->CallStaticVoidMethodA(this,cls,methodID,args);
1549 }
1550
1551 jfieldID GetStaticFieldID(jclass clazz, const char *name,
1552 const char *sig) {
1553 return functions->GetStaticFieldID(this,clazz,name,sig);
1554 }
1555 jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) {
1556 return functions->GetStaticObjectField(this,clazz,fieldID);
1557 }
1558 jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) {
1559 return functions->GetStaticBooleanField(this,clazz,fieldID);
1560 }
1561 jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) {
1562 return functions->GetStaticByteField(this,clazz,fieldID);
1563 }
1564 jchar GetStaticCharField(jclass clazz, jfieldID fieldID) {
1565 return functions->GetStaticCharField(this,clazz,fieldID);
1566 }
1567 jshort GetStaticShortField(jclass clazz, jfieldID fieldID) {
1568 return functions->GetStaticShortField(this,clazz,fieldID);
1569 }
1570 jint GetStaticIntField(jclass clazz, jfieldID fieldID) {
1571 return functions->GetStaticIntField(this,clazz,fieldID);
1572 }
1573 jlong GetStaticLongField(jclass clazz, jfieldID fieldID) {
1574 return functions->GetStaticLongField(this,clazz,fieldID);
1575 }
1576 jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) {
1577 return functions->GetStaticFloatField(this,clazz,fieldID);
1578 }
1579 jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) {
1580 return functions->GetStaticDoubleField(this,clazz,fieldID);
1581 }
1582
1583 void SetStaticObjectField(jclass clazz, jfieldID fieldID,
1584 jobject value) {
1585 functions->SetStaticObjectField(this,clazz,fieldID,value);
1586 }
1587 void SetStaticBooleanField(jclass clazz, jfieldID fieldID,
1588 jboolean value) {
1589 functions->SetStaticBooleanField(this,clazz,fieldID,value);
1590 }
1591 void SetStaticByteField(jclass clazz, jfieldID fieldID,
1592 jbyte value) {
1593 functions->SetStaticByteField(this,clazz,fieldID,value);
1594 }
1595 void SetStaticCharField(jclass clazz, jfieldID fieldID,
1596 jchar value) {
1597 functions->SetStaticCharField(this,clazz,fieldID,value);
1598 }
1599 void SetStaticShortField(jclass clazz, jfieldID fieldID,
1600 jshort value) {
1601 functions->SetStaticShortField(this,clazz,fieldID,value);
1602 }
1603 void SetStaticIntField(jclass clazz, jfieldID fieldID,
1604 jint value) {
1605 functions->SetStaticIntField(this,clazz,fieldID,value);
1606 }
1607 void SetStaticLongField(jclass clazz, jfieldID fieldID,
1608 jlong value) {
1609 functions->SetStaticLongField(this,clazz,fieldID,value);
1610 }
1611 void SetStaticFloatField(jclass clazz, jfieldID fieldID,
1612 jfloat value) {
1613 functions->SetStaticFloatField(this,clazz,fieldID,value);
1614 }
1615 void SetStaticDoubleField(jclass clazz, jfieldID fieldID,
1616 jdouble value) {
1617 functions->SetStaticDoubleField(this,clazz,fieldID,value);
1618 }
1619
1620 jstring NewString(const jchar *unicode, jsize len) {
1621 return functions->NewString(this,unicode,len);
1622 }
1623 jsize GetStringLength(jstring str) {
1624 return functions->GetStringLength(this,str);
1625 }
1626 const jchar *GetStringChars(jstring str, jboolean *isCopy) {
1627 return functions->GetStringChars(this,str,isCopy);
1628 }
1629 void ReleaseStringChars(jstring str, const jchar *chars) {
1630 functions->ReleaseStringChars(this,str,chars);
1631 }
1632
1633 jstring NewStringUTF(const char *utf) {
1634 return functions->NewStringUTF(this,utf);
1635 }
1636 jsize GetStringUTFLength(jstring str) {
1637 return functions->GetStringUTFLength(this,str);
1638 }
1639 jlong GetStringUTFLengthAsLong(jstring str) {
1640 return functions->GetStringUTFLengthAsLong(this,str);
1641 }
1642 const char* GetStringUTFChars(jstring str, jboolean *isCopy) {
1643 return functions->GetStringUTFChars(this,str,isCopy);
1644 }
1645 void ReleaseStringUTFChars(jstring str, const char* chars) {
1646 functions->ReleaseStringUTFChars(this,str,chars);
1647 }
1648
1649 jsize GetArrayLength(jarray array) {
1650 return functions->GetArrayLength(this,array);
1651 }
1652
1653 jobjectArray NewObjectArray(jsize len, jclass clazz,
1654 jobject init) {
1655 return functions->NewObjectArray(this,len,clazz,init);
1656 }
1657 jobject GetObjectArrayElement(jobjectArray array, jsize index) {
1658 return functions->GetObjectArrayElement(this,array,index);
1659 }
1660 void SetObjectArrayElement(jobjectArray array, jsize index,
1661 jobject val) {
1662 functions->SetObjectArrayElement(this,array,index,val);
1663 }
1664
1665 jbooleanArray NewBooleanArray(jsize len) {
1666 return functions->NewBooleanArray(this,len);
1667 }
1668 jbyteArray NewByteArray(jsize len) {
1669 return functions->NewByteArray(this,len);
1670 }
1671 jcharArray NewCharArray(jsize len) {
1672 return functions->NewCharArray(this,len);
1673 }
1674 jshortArray NewShortArray(jsize len) {
1675 return functions->NewShortArray(this,len);
1676 }
1677 jintArray NewIntArray(jsize len) {
1678 return functions->NewIntArray(this,len);
1679 }
1680 jlongArray NewLongArray(jsize len) {
1681 return functions->NewLongArray(this,len);
1682 }
1683 jfloatArray NewFloatArray(jsize len) {
1684 return functions->NewFloatArray(this,len);
1685 }
1686 jdoubleArray NewDoubleArray(jsize len) {
1687 return functions->NewDoubleArray(this,len);
1688 }
1689
1690 jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) {
1691 return functions->GetBooleanArrayElements(this,array,isCopy);
1692 }
1693 jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) {
1694 return functions->GetByteArrayElements(this,array,isCopy);
1695 }
1696 jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) {
1697 return functions->GetCharArrayElements(this,array,isCopy);
1698 }
1699 jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) {
1700 return functions->GetShortArrayElements(this,array,isCopy);
1701 }
1702 jint * GetIntArrayElements(jintArray array, jboolean *isCopy) {
1703 return functions->GetIntArrayElements(this,array,isCopy);
1704 }
1705 jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) {
1706 return functions->GetLongArrayElements(this,array,isCopy);
1707 }
1708 jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) {
1709 return functions->GetFloatArrayElements(this,array,isCopy);
1710 }
1711 jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) {
1712 return functions->GetDoubleArrayElements(this,array,isCopy);
1713 }
1714
1715 void ReleaseBooleanArrayElements(jbooleanArray array,
1716 jboolean *elems,
1717 jint mode) {
1718 functions->ReleaseBooleanArrayElements(this,array,elems,mode);
1719 }
1720 void ReleaseByteArrayElements(jbyteArray array,
1721 jbyte *elems,
1722 jint mode) {
1723 functions->ReleaseByteArrayElements(this,array,elems,mode);
1724 }
1725 void ReleaseCharArrayElements(jcharArray array,
1726 jchar *elems,
1727 jint mode) {
1728 functions->ReleaseCharArrayElements(this,array,elems,mode);
1729 }
1730 void ReleaseShortArrayElements(jshortArray array,
1731 jshort *elems,
1732 jint mode) {
1733 functions->ReleaseShortArrayElements(this,array,elems,mode);
1734 }
1735 void ReleaseIntArrayElements(jintArray array,
1736 jint *elems,
1737 jint mode) {
1738 functions->ReleaseIntArrayElements(this,array,elems,mode);
1739 }
1740 void ReleaseLongArrayElements(jlongArray array,
1741 jlong *elems,
1742 jint mode) {
1743 functions->ReleaseLongArrayElements(this,array,elems,mode);
1744 }
1745 void ReleaseFloatArrayElements(jfloatArray array,
1746 jfloat *elems,
1747 jint mode) {
1748 functions->ReleaseFloatArrayElements(this,array,elems,mode);
1749 }
1750 void ReleaseDoubleArrayElements(jdoubleArray array,
1751 jdouble *elems,
1752 jint mode) {
1753 functions->ReleaseDoubleArrayElements(this,array,elems,mode);
1754 }
1755
1756 void GetBooleanArrayRegion(jbooleanArray array,
1757 jsize start, jsize len, jboolean *buf) {
1758 functions->GetBooleanArrayRegion(this,array,start,len,buf);
1759 }
1760 void GetByteArrayRegion(jbyteArray array,
1761 jsize start, jsize len, jbyte *buf) {
1762 functions->GetByteArrayRegion(this,array,start,len,buf);
1763 }
1764 void GetCharArrayRegion(jcharArray array,
1765 jsize start, jsize len, jchar *buf) {
1766 functions->GetCharArrayRegion(this,array,start,len,buf);
1767 }
1768 void GetShortArrayRegion(jshortArray array,
1769 jsize start, jsize len, jshort *buf) {
1770 functions->GetShortArrayRegion(this,array,start,len,buf);
1771 }
1772 void GetIntArrayRegion(jintArray array,
1773 jsize start, jsize len, jint *buf) {
1774 functions->GetIntArrayRegion(this,array,start,len,buf);
1775 }
1776 void GetLongArrayRegion(jlongArray array,
1777 jsize start, jsize len, jlong *buf) {
1778 functions->GetLongArrayRegion(this,array,start,len,buf);
1779 }
1780 void GetFloatArrayRegion(jfloatArray array,
1781 jsize start, jsize len, jfloat *buf) {
1782 functions->GetFloatArrayRegion(this,array,start,len,buf);
1783 }
1784 void GetDoubleArrayRegion(jdoubleArray array,
1785 jsize start, jsize len, jdouble *buf) {
1786 functions->GetDoubleArrayRegion(this,array,start,len,buf);
1787 }
1788
1789 void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,
1790 const jboolean *buf) {
1791 functions->SetBooleanArrayRegion(this,array,start,len,buf);
1792 }
1793 void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,
1794 const jbyte *buf) {
1795 functions->SetByteArrayRegion(this,array,start,len,buf);
1796 }
1797 void SetCharArrayRegion(jcharArray array, jsize start, jsize len,
1798 const jchar *buf) {
1799 functions->SetCharArrayRegion(this,array,start,len,buf);
1800 }
1801 void SetShortArrayRegion(jshortArray array, jsize start, jsize len,
1802 const jshort *buf) {
1803 functions->SetShortArrayRegion(this,array,start,len,buf);
1804 }
1805 void SetIntArrayRegion(jintArray array, jsize start, jsize len,
1806 const jint *buf) {
1807 functions->SetIntArrayRegion(this,array,start,len,buf);
1808 }
1809 void SetLongArrayRegion(jlongArray array, jsize start, jsize len,
1810 const jlong *buf) {
1811 functions->SetLongArrayRegion(this,array,start,len,buf);
1812 }
1813 void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,
1814 const jfloat *buf) {
1815 functions->SetFloatArrayRegion(this,array,start,len,buf);
1816 }
1817 void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
1818 const jdouble *buf) {
1819 functions->SetDoubleArrayRegion(this,array,start,len,buf);
1820 }
1821
1822 jint RegisterNatives(jclass clazz, const JNINativeMethod *methods,
1823 jint nMethods) {
1824 return functions->RegisterNatives(this,clazz,methods,nMethods);
1825 }
1826 jint UnregisterNatives(jclass clazz) {
1827 return functions->UnregisterNatives(this,clazz);
1828 }
1829
1830 jint MonitorEnter(jobject obj) {
1831 return functions->MonitorEnter(this,obj);
1832 }
1833 jint MonitorExit(jobject obj) {
1834 return functions->MonitorExit(this,obj);
1835 }
1836
1837 jint GetJavaVM(JavaVM **vm) {
1838 return functions->GetJavaVM(this,vm);
1839 }
1840
1841 void GetStringRegion(jstring str, jsize start, jsize len, jchar *buf) {
1842 functions->GetStringRegion(this,str,start,len,buf);
1843 }
1844 void GetStringUTFRegion(jstring str, jsize start, jsize len, char *buf) {
1845 functions->GetStringUTFRegion(this,str,start,len,buf);
1846 }
1847
1848 void * GetPrimitiveArrayCritical(jarray array, jboolean *isCopy) {
1849 return functions->GetPrimitiveArrayCritical(this,array,isCopy);
1850 }
1851 void ReleasePrimitiveArrayCritical(jarray array, void *carray, jint mode) {
1852 functions->ReleasePrimitiveArrayCritical(this,array,carray,mode);
1853 }
1854
1855 const jchar * GetStringCritical(jstring string, jboolean *isCopy) {
1856 return functions->GetStringCritical(this,string,isCopy);
1857 }
1858 void ReleaseStringCritical(jstring string, const jchar *cstring) {
1859 functions->ReleaseStringCritical(this,string,cstring);
1860 }
1861
1862 jweak NewWeakGlobalRef(jobject obj) {
1863 return functions->NewWeakGlobalRef(this,obj);
1864 }
1865 void DeleteWeakGlobalRef(jweak ref) {
1866 functions->DeleteWeakGlobalRef(this,ref);
1867 }
1868
1869 jboolean ExceptionCheck() {
1870 return functions->ExceptionCheck(this);
1871 }
1872
1873 jobject NewDirectByteBuffer(void* address, jlong capacity) {
1874 return functions->NewDirectByteBuffer(this, address, capacity);
1875 }
1876 void* GetDirectBufferAddress(jobject buf) {
1877 return functions->GetDirectBufferAddress(this, buf);
1878 }
1879 jlong GetDirectBufferCapacity(jobject buf) {
1880 return functions->GetDirectBufferCapacity(this, buf);
1881 }
1882 jobjectRefType GetObjectRefType(jobject obj) {
1883 return functions->GetObjectRefType(this, obj);
1884 }
1885
1886 /* Module Features */
1887
1888 jobject GetModule(jclass clazz) {
1889 return functions->GetModule(this, clazz);
1890 }
1891
1892 /* Virtual threads */
1893
1894 jboolean IsVirtualThread(jobject obj) {
1895 return functions->IsVirtualThread(this, obj);
1896 }
1897
1898 /* Value classes */
1899
1900 jboolean IsValueObject(jobject obj) {
1901 return functions->IsValueObject(this, obj);
1902 }
1903
1904 #endif /* __cplusplus */
1905 };
1906
1907 /*
1908 * optionString may be any option accepted by the JVM, or one of the
1909 * following:
1910 *
1911 * -D<name>=<value> Set a system property.
1912 * -verbose[:class|gc|jni] Enable verbose output, comma-separated. E.g.
1913 * "-verbose:class" or "-verbose:gc,class"
1914 * Standard names include: gc, class, and jni.
1915 * All nonstandard (VM-specific) names must begin
1916 * with "X".
1917 * vfprintf extraInfo is a pointer to the vfprintf hook.
1918 * exit extraInfo is a pointer to the exit hook.
1919 * abort extraInfo is a pointer to the abort hook.
1920 */
1921 typedef struct JavaVMOption {
1922 char *optionString;
1923 void *extraInfo;
1924 } JavaVMOption;
1925
1926 typedef struct JavaVMInitArgs {
1927 jint version;
1928
1929 jint nOptions;
1930 JavaVMOption *options;
1931 jboolean ignoreUnrecognized;
1932 } JavaVMInitArgs;
1933
1934 typedef struct JavaVMAttachArgs {
1935 jint version;
1936
1937 char *name;
1938 jobject group;
1939 } JavaVMAttachArgs;
1940
1941 /* These will be VM-specific. */
1942
1943 #define JDK1_2
1944 #define JDK1_4
1945
1946 /* End VM-specific. */
1947
1948 struct JNIInvokeInterface_ {
1949 void *reserved0;
1950 void *reserved1;
1951 void *reserved2;
1952
1953 jint (JNICALL *DestroyJavaVM)(JavaVM *vm);
1954
1955 jint (JNICALL *AttachCurrentThread)(JavaVM *vm, void **penv, void *args);
1956
1957 jint (JNICALL *DetachCurrentThread)(JavaVM *vm);
1958
1959 jint (JNICALL *GetEnv)(JavaVM *vm, void **penv, jint version);
1960
1961 jint (JNICALL *AttachCurrentThreadAsDaemon)(JavaVM *vm, void **penv, void *args);
1962 };
1963
1964 struct JavaVM_ {
1965 const struct JNIInvokeInterface_ *functions;
1966 #ifdef __cplusplus
1967
1968 jint DestroyJavaVM() {
1969 return functions->DestroyJavaVM(this);
1970 }
1971 jint AttachCurrentThread(void **penv, void *args) {
1972 return functions->AttachCurrentThread(this, penv, args);
1973 }
1974 jint DetachCurrentThread() {
1975 return functions->DetachCurrentThread(this);
1976 }
1977
1978 jint GetEnv(void **penv, jint version) {
1979 return functions->GetEnv(this, penv, version);
1980 }
1981 jint AttachCurrentThreadAsDaemon(void **penv, void *args) {
1982 return functions->AttachCurrentThreadAsDaemon(this, penv, args);
1983 }
1984 #endif
1985 };
1986
1987 #ifdef _JNI_IMPLEMENTATION_
1988 #define _JNI_IMPORT_OR_EXPORT_ JNIEXPORT
1989 #else
1990 #define _JNI_IMPORT_OR_EXPORT_ JNIIMPORT
1991 #endif
1992 _JNI_IMPORT_OR_EXPORT_ jint JNICALL
1993 JNI_GetDefaultJavaVMInitArgs(void *args);
1994
1995 _JNI_IMPORT_OR_EXPORT_ jint JNICALL
1996 JNI_CreateJavaVM(JavaVM **pvm, void **penv, void *args);
1997
1998 _JNI_IMPORT_OR_EXPORT_ jint JNICALL
1999 JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);
2000
2001 /* Defined by native libraries. */
2002 JNIEXPORT jint JNICALL
2003 JNI_OnLoad(JavaVM *vm, void *reserved);
2004
2005 JNIEXPORT void JNICALL
2006 JNI_OnUnload(JavaVM *vm, void *reserved);
2007
2008 #define JNI_VERSION_1_1 0x00010001
2009 #define JNI_VERSION_1_2 0x00010002
2010 #define JNI_VERSION_1_4 0x00010004
2011 #define JNI_VERSION_1_6 0x00010006
2012 #define JNI_VERSION_1_8 0x00010008
2013 #define JNI_VERSION_9 0x00090000
2014 #define JNI_VERSION_10 0x000a0000
2015 #define JNI_VERSION_19 0x00130000
2016 #define JNI_VERSION_20 0x00140000
2017 #define JNI_VERSION_21 0x00150000
2018 #define JNI_VERSION_24 0x00180000
2019
2020 #ifdef __cplusplus
2021 } /* extern "C" */
2022 #endif /* __cplusplus */
2023
2024 #endif /* !_JAVASOFT_JNI_H_ */