2
* @(#)jni.h 1.26 97/01/27
4
* Copyright (c) 1993-1996 Sun Microsystems, Inc. All Rights Reserved.
6
* Permission to use, copy, modify, and distribute this software
7
* and its documentation for NON-COMMERCIAL purposes and without
8
* fee is hereby granted provided that this copyright notice
9
* appears in all copies.
11
* The Java source code is the confidential and proprietary information
12
* of Sun Microsystems, Inc. ("Confidential Information"). You shall
13
* not disclose such Confidential Information and shall use it only in
14
* accordance with the terms of the license agreement you entered into
17
* SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
18
* THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
19
* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
20
* PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
21
* ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
22
* DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
26
* We used part of Netscape's Java Runtime Interface (JRI) as the starting
27
* point of our design and implementation.
30
/******************************************************************************
31
* Java Runtime Interface
32
* Copyright (c) 1996 Netscape Communications Corporation. All rights reserved.
33
*****************************************************************************/
41
/* jni_md.h contains the machine-dependent typedefs for jbyte, jint
54
typedef unsigned char jboolean;
55
typedef unsigned short jchar;
58
typedef double jdouble;
65
class _jclass : public _jobject {};
66
class _jthrowable : public _jobject {};
67
class _jstring : public _jobject {};
68
class _jarray : public _jobject {};
69
class _jbooleanArray : public _jarray {};
70
class _jbyteArray : public _jarray {};
71
class _jcharArray : public _jarray {};
72
class _jshortArray : public _jarray {};
73
class _jintArray : public _jarray {};
74
class _jlongArray : public _jarray {};
75
class _jfloatArray : public _jarray {};
76
class _jdoubleArray : public _jarray {};
77
class _jobjectArray : public _jarray {};
79
typedef _jobject *jobject;
80
typedef _jclass *jclass;
81
typedef _jthrowable *jthrowable;
82
typedef _jstring *jstring;
83
typedef _jarray *jarray;
84
typedef _jbooleanArray *jbooleanArray;
85
typedef _jbyteArray *jbyteArray;
86
typedef _jcharArray *jcharArray;
87
typedef _jshortArray *jshortArray;
88
typedef _jintArray *jintArray;
89
typedef _jlongArray *jlongArray;
90
typedef _jfloatArray *jfloatArray;
91
typedef _jdoubleArray *jdoubleArray;
92
typedef _jobjectArray *jobjectArray;
98
typedef struct _jobject *jobject;
99
typedef jobject jclass;
100
typedef jobject jthrowable;
101
typedef jobject jstring;
102
typedef jobject jarray;
103
typedef jarray jbooleanArray;
104
typedef jarray jbyteArray;
105
typedef jarray jcharArray;
106
typedef jarray jshortArray;
107
typedef jarray jintArray;
108
typedef jarray jlongArray;
109
typedef jarray jfloatArray;
110
typedef jarray jdoubleArray;
111
typedef jarray jobjectArray;
115
typedef jobject jref; /* For transition---not meant to be part of public
118
typedef union jvalue {
131
typedef struct _jfieldID *jfieldID;
134
typedef struct _jmethodID *jmethodID;
144
* possible return values for JNI functions.
151
* used in ReleaseScalarArrayElements
158
* used in RegisterNatives to describe native method name, signature,
159
* and function pointer.
169
* JNI Native Method Interface.
172
struct JNINativeInterface_;
177
typedef JNIEnv_ JNIEnv;
179
typedef const struct JNINativeInterface_ *JNIEnv;
183
* JNI Invocation Interface.
186
struct JNIInvokeInterface_;
191
typedef JavaVM_ JavaVM;
193
typedef const struct JNIInvokeInterface_ *JavaVM;
196
struct JNINativeInterface_ {
202
jint (*GetVersion)(JNIEnv *env);
204
jclass (*DefineClass)
205
(JNIEnv *env, const char *name, jobject loader, const jbyte *buf,
208
(JNIEnv *env, const char *name);
214
jclass (*GetSuperclass)
215
(JNIEnv *env, jclass sub);
216
jboolean (*IsAssignableFrom)
217
(JNIEnv *env, jclass sub, jclass sup);
222
(JNIEnv *env, jthrowable obj);
224
(JNIEnv *env, jclass clazz, const char *msg);
225
jthrowable (*ExceptionOccurred)
227
void (*ExceptionDescribe)
229
void (*ExceptionClear)
232
(JNIEnv *env, const char *msg);
236
jobject (*NewGlobalRef)
237
(JNIEnv *env, jobject lobj);
238
void (*DeleteGlobalRef)
239
(JNIEnv *env, jobject gref);
240
void (*DeleteLocalRef)
241
(JNIEnv *env, jobject obj);
242
jboolean (*IsSameObject)
243
(JNIEnv *env, jobject obj1, jobject obj2);
247
jobject (*AllocObject)
248
(JNIEnv *env, jclass clazz);
250
(JNIEnv *env, jclass clazz, jmethodID methodID, ...);
251
jobject (*NewObjectV)
252
(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
253
jobject (*NewObjectA)
254
(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
256
jclass (*GetObjectClass)
257
(JNIEnv *env, jobject obj);
258
jboolean (*IsInstanceOf)
259
(JNIEnv *env, jobject obj, jclass clazz);
261
jmethodID (*GetMethodID)
262
(JNIEnv *env, jclass clazz, const char *name, const char *sig);
264
jobject (*CallObjectMethod)
265
(JNIEnv *env, jobject obj, jmethodID methodID, ...);
266
jobject (*CallObjectMethodV)
267
(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
268
jobject (*CallObjectMethodA)
269
(JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);
271
jboolean (*CallBooleanMethod)
272
(JNIEnv *env, jobject obj, jmethodID methodID, ...);
273
jboolean (*CallBooleanMethodV)
274
(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
275
jboolean (*CallBooleanMethodA)
276
(JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);
278
jbyte (*CallByteMethod)
279
(JNIEnv *env, jobject obj, jmethodID methodID, ...);
280
jbyte (*CallByteMethodV)
281
(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
282
jbyte (*CallByteMethodA)
283
(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
285
jchar (*CallCharMethod)
286
(JNIEnv *env, jobject obj, jmethodID methodID, ...);
287
jchar (*CallCharMethodV)
288
(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
289
jchar (*CallCharMethodA)
290
(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
292
jshort (*CallShortMethod)
293
(JNIEnv *env, jobject obj, jmethodID methodID, ...);
294
jshort (*CallShortMethodV)
295
(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
296
jshort (*CallShortMethodA)
297
(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
299
jint (*CallIntMethod)
300
(JNIEnv *env, jobject obj, jmethodID methodID, ...);
301
jint (*CallIntMethodV)
302
(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
303
jint (*CallIntMethodA)
304
(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
306
jlong (*CallLongMethod)
307
(JNIEnv *env, jobject obj, jmethodID methodID, ...);
308
jlong (*CallLongMethodV)
309
(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
310
jlong (*CallLongMethodA)
311
(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
313
jfloat (*CallFloatMethod)
314
(JNIEnv *env, jobject obj, jmethodID methodID, ...);
315
jfloat (*CallFloatMethodV)
316
(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
317
jfloat (*CallFloatMethodA)
318
(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
320
jdouble (*CallDoubleMethod)
321
(JNIEnv *env, jobject obj, jmethodID methodID, ...);
322
jdouble (*CallDoubleMethodV)
323
(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
324
jdouble (*CallDoubleMethodA)
325
(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
327
void (*CallVoidMethod)
328
(JNIEnv *env, jobject obj, jmethodID methodID, ...);
329
void (*CallVoidMethodV)
330
(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
331
void (*CallVoidMethodA)
332
(JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);
334
jobject (*CallNonvirtualObjectMethod)
335
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
336
jobject (*CallNonvirtualObjectMethodV)
337
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
339
jobject (*CallNonvirtualObjectMethodA)
340
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
343
jboolean (*CallNonvirtualBooleanMethod)
344
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
345
jboolean (*CallNonvirtualBooleanMethodV)
346
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
348
jboolean (*CallNonvirtualBooleanMethodA)
349
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
352
jbyte (*CallNonvirtualByteMethod)
353
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
354
jbyte (*CallNonvirtualByteMethodV)
355
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
357
jbyte (*CallNonvirtualByteMethodA)
358
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
361
jchar (*CallNonvirtualCharMethod)
362
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
363
jchar (*CallNonvirtualCharMethodV)
364
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
366
jchar (*CallNonvirtualCharMethodA)
367
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
370
jshort (*CallNonvirtualShortMethod)
371
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
372
jshort (*CallNonvirtualShortMethodV)
373
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
375
jshort (*CallNonvirtualShortMethodA)
376
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
379
jint (*CallNonvirtualIntMethod)
380
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
381
jint (*CallNonvirtualIntMethodV)
382
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
384
jint (*CallNonvirtualIntMethodA)
385
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
388
jlong (*CallNonvirtualLongMethod)
389
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
390
jlong (*CallNonvirtualLongMethodV)
391
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
393
jlong (*CallNonvirtualLongMethodA)
394
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
397
jfloat (*CallNonvirtualFloatMethod)
398
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
399
jfloat (*CallNonvirtualFloatMethodV)
400
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
402
jfloat (*CallNonvirtualFloatMethodA)
403
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
406
jdouble (*CallNonvirtualDoubleMethod)
407
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
408
jdouble (*CallNonvirtualDoubleMethodV)
409
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
411
jdouble (*CallNonvirtualDoubleMethodA)
412
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
415
void (*CallNonvirtualVoidMethod)
416
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
417
void (*CallNonvirtualVoidMethodV)
418
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
420
void (*CallNonvirtualVoidMethodA)
421
(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
424
jfieldID (*GetFieldID)
425
(JNIEnv *env, jclass clazz, const char *name, const char *sig);
427
jobject (*GetObjectField)
428
(JNIEnv *env, jobject obj, jfieldID fieldID);
429
jboolean (*GetBooleanField)
430
(JNIEnv *env, jobject obj, jfieldID fieldID);
431
jbyte (*GetByteField)
432
(JNIEnv *env, jobject obj, jfieldID fieldID);
433
jchar (*GetCharField)
434
(JNIEnv *env, jobject obj, jfieldID fieldID);
435
jshort (*GetShortField)
436
(JNIEnv *env, jobject obj, jfieldID fieldID);
438
(JNIEnv *env, jobject obj, jfieldID fieldID);
439
jlong (*GetLongField)
440
(JNIEnv *env, jobject obj, jfieldID fieldID);
441
jfloat (*GetFloatField)
442
(JNIEnv *env, jobject obj, jfieldID fieldID);
443
jdouble (*GetDoubleField)
444
(JNIEnv *env, jobject obj, jfieldID fieldID);
446
void (*SetObjectField)
447
(JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);
448
void (*SetBooleanField)
449
(JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);
451
(JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);
453
(JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);
454
void (*SetShortField)
455
(JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);
457
(JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
459
(JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);
460
void (*SetFloatField)
461
(JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);
462
void (*SetDoubleField)
463
(JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);
465
jmethodID (*GetStaticMethodID)
466
(JNIEnv *env, jclass clazz, const char *name, const char *sig);
468
jobject (*CallStaticObjectMethod)
469
(JNIEnv *env, jclass clazz, jmethodID methodID, ...);
470
jobject (*CallStaticObjectMethodV)
471
(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
472
jobject (*CallStaticObjectMethodA)
473
(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
475
jboolean (*CallStaticBooleanMethod)
476
(JNIEnv *env, jclass clazz, jmethodID methodID, ...);
477
jboolean (*CallStaticBooleanMethodV)
478
(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
479
jboolean (*CallStaticBooleanMethodA)
480
(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
482
jbyte (*CallStaticByteMethod)
483
(JNIEnv *env, jclass clazz, jmethodID methodID, ...);
484
jbyte (*CallStaticByteMethodV)
485
(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
486
jbyte (*CallStaticByteMethodA)
487
(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
489
jchar (*CallStaticCharMethod)
490
(JNIEnv *env, jclass clazz, jmethodID methodID, ...);
491
jchar (*CallStaticCharMethodV)
492
(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
493
jchar (*CallStaticCharMethodA)
494
(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
496
jshort (*CallStaticShortMethod)
497
(JNIEnv *env, jclass clazz, jmethodID methodID, ...);
498
jshort (*CallStaticShortMethodV)
499
(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
500
jshort (*CallStaticShortMethodA)
501
(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
503
jint (*CallStaticIntMethod)
504
(JNIEnv *env, jclass clazz, jmethodID methodID, ...);
505
jint (*CallStaticIntMethodV)
506
(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
507
jint (*CallStaticIntMethodA)
508
(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
510
jlong (*CallStaticLongMethod)
511
(JNIEnv *env, jclass clazz, jmethodID methodID, ...);
512
jlong (*CallStaticLongMethodV)
513
(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
514
jlong (*CallStaticLongMethodA)
515
(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
517
jfloat (*CallStaticFloatMethod)
518
(JNIEnv *env, jclass clazz, jmethodID methodID, ...);
519
jfloat (*CallStaticFloatMethodV)
520
(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
521
jfloat (*CallStaticFloatMethodA)
522
(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
524
jdouble (*CallStaticDoubleMethod)
525
(JNIEnv *env, jclass clazz, jmethodID methodID, ...);
526
jdouble (*CallStaticDoubleMethodV)
527
(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
528
jdouble (*CallStaticDoubleMethodA)
529
(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
531
void (*CallStaticVoidMethod)
532
(JNIEnv *env, jclass cls, jmethodID methodID, ...);
533
void (*CallStaticVoidMethodV)
534
(JNIEnv *env, jclass cls, jmethodID methodID, va_list args);
535
void (*CallStaticVoidMethodA)
536
(JNIEnv *env, jclass cls, jmethodID methodID, jvalue * args);
538
jfieldID (*GetStaticFieldID)
539
(JNIEnv *env, jclass clazz, const char *name, const char *sig);
540
jobject (*GetStaticObjectField)
541
(JNIEnv *env, jclass clazz, jfieldID fieldID);
542
jboolean (*GetStaticBooleanField)
543
(JNIEnv *env, jclass clazz, jfieldID fieldID);
544
jbyte (*GetStaticByteField)
545
(JNIEnv *env, jclass clazz, jfieldID fieldID);
546
jchar (*GetStaticCharField)
547
(JNIEnv *env, jclass clazz, jfieldID fieldID);
548
jshort (*GetStaticShortField)
549
(JNIEnv *env, jclass clazz, jfieldID fieldID);
550
jint (*GetStaticIntField)
551
(JNIEnv *env, jclass clazz, jfieldID fieldID);
552
jlong (*GetStaticLongField)
553
(JNIEnv *env, jclass clazz, jfieldID fieldID);
554
jfloat (*GetStaticFloatField)
555
(JNIEnv *env, jclass clazz, jfieldID fieldID);
556
jdouble (*GetStaticDoubleField)
557
(JNIEnv *env, jclass clazz, jfieldID fieldID);
559
void (*SetStaticObjectField)
560
(JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value);
561
void (*SetStaticBooleanField)
562
(JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value);
563
void (*SetStaticByteField)
564
(JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value);
565
void (*SetStaticCharField)
566
(JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value);
567
void (*SetStaticShortField)
568
(JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value);
569
void (*SetStaticIntField)
570
(JNIEnv *env, jclass clazz, jfieldID fieldID, jint value);
571
void (*SetStaticLongField)
572
(JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value);
573
void (*SetStaticFloatField)
574
(JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value);
575
void (*SetStaticDoubleField)
576
(JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value);
579
(JNIEnv *env, const jchar *unicode, jsize len);
580
jsize (*GetStringLength)
581
(JNIEnv *env, jstring str);
582
const jchar *(*GetStringChars)
583
(JNIEnv *env, jstring str, jboolean *isCopy);
584
void (*ReleaseStringChars)
585
(JNIEnv *env, jstring str, const jchar *chars);
587
jstring (*NewStringUTF)
588
(JNIEnv *env, const char *utf);
589
jsize (*GetStringUTFLength)
590
(JNIEnv *env, jstring str);
591
const char* (*GetStringUTFChars)
592
(JNIEnv *env, jstring str, jboolean *isCopy);
593
void (*ReleaseStringUTFChars)
594
(JNIEnv *env, jstring str, const char* chars);
597
jsize (*GetArrayLength)
598
(JNIEnv *env, jarray array);
600
jobjectArray (*NewObjectArray)
601
(JNIEnv *env, jsize len, jclass clazz, jobject init);
602
jobject (*GetObjectArrayElement)
603
(JNIEnv *env, jobjectArray array, jsize index);
604
void (*SetObjectArrayElement)
605
(JNIEnv *env, jobjectArray array, jsize index, jobject val);
607
jbooleanArray (*NewBooleanArray)
608
(JNIEnv *env, jsize len);
609
jbyteArray (*NewByteArray)
610
(JNIEnv *env, jsize len);
611
jcharArray (*NewCharArray)
612
(JNIEnv *env, jsize len);
613
jshortArray (*NewShortArray)
614
(JNIEnv *env, jsize len);
615
jintArray (*NewIntArray)
616
(JNIEnv *env, jsize len);
617
jlongArray (*NewLongArray)
618
(JNIEnv *env, jsize len);
619
jfloatArray (*NewFloatArray)
620
(JNIEnv *env, jsize len);
621
jdoubleArray (*NewDoubleArray)
622
(JNIEnv *env, jsize len);
624
jboolean * (*GetBooleanArrayElements)
625
(JNIEnv *env, jbooleanArray array, jboolean *isCopy);
626
jbyte * (*GetByteArrayElements)
627
(JNIEnv *env, jbyteArray array, jboolean *isCopy);
628
jchar * (*GetCharArrayElements)
629
(JNIEnv *env, jcharArray array, jboolean *isCopy);
630
jshort * (*GetShortArrayElements)
631
(JNIEnv *env, jshortArray array, jboolean *isCopy);
632
jint * (*GetIntArrayElements)
633
(JNIEnv *env, jintArray array, jboolean *isCopy);
634
jlong * (*GetLongArrayElements)
635
(JNIEnv *env, jlongArray array, jboolean *isCopy);
636
jfloat * (*GetFloatArrayElements)
637
(JNIEnv *env, jfloatArray array, jboolean *isCopy);
638
jdouble * (*GetDoubleArrayElements)
639
(JNIEnv *env, jdoubleArray array, jboolean *isCopy);
641
void (*ReleaseBooleanArrayElements)
642
(JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode);
643
void (*ReleaseByteArrayElements)
644
(JNIEnv *env, jbyteArray array, jbyte *elems, jint mode);
645
void (*ReleaseCharArrayElements)
646
(JNIEnv *env, jcharArray array, jchar *elems, jint mode);
647
void (*ReleaseShortArrayElements)
648
(JNIEnv *env, jshortArray array, jshort *elems, jint mode);
649
void (*ReleaseIntArrayElements)
650
(JNIEnv *env, jintArray array, jint *elems, jint mode);
651
void (*ReleaseLongArrayElements)
652
(JNIEnv *env, jlongArray array, jlong *elems, jint mode);
653
void (*ReleaseFloatArrayElements)
654
(JNIEnv *env, jfloatArray array, jfloat *elems, jint mode);
655
void (*ReleaseDoubleArrayElements)
656
(JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode);
658
void (*GetBooleanArrayRegion)
659
(JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);
660
void (*GetByteArrayRegion)
661
(JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);
662
void (*GetCharArrayRegion)
663
(JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);
664
void (*GetShortArrayRegion)
665
(JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);
666
void (*GetIntArrayRegion)
667
(JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);
668
void (*GetLongArrayRegion)
669
(JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);
670
void (*GetFloatArrayRegion)
671
(JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);
672
void (*GetDoubleArrayRegion)
673
(JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);
675
void (*SetBooleanArrayRegion)
676
(JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);
677
void (*SetByteArrayRegion)
678
(JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);
679
void (*SetCharArrayRegion)
680
(JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);
681
void (*SetShortArrayRegion)
682
(JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);
683
void (*SetIntArrayRegion)
684
(JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);
685
void (*SetLongArrayRegion)
686
(JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);
687
void (*SetFloatArrayRegion)
688
(JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);
689
void (*SetDoubleArrayRegion)
690
(JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);
692
jint (*RegisterNatives)
693
(JNIEnv *env, jclass clazz, const JNINativeMethod *methods,
695
jint (*UnregisterNatives)
696
(JNIEnv *env, jclass clazz);
699
(JNIEnv *env, jobject obj);
701
(JNIEnv *env, jobject obj);
704
(JNIEnv *env, JavaVM **vm);
708
* We use inlined functions for C++ so that programmers can write:
710
* env->FindClass("java/lang/String")
712
* in C++ rather than:
714
* (*env)->FindClass(env, "java/lang/String")
720
const struct JNINativeInterface_ *functions;
726
return functions->GetVersion(this);
728
jclass DefineClass(const char *name, jobject loader, const jbyte *buf,
730
return functions->DefineClass(this, name, loader, buf, len);
732
jclass FindClass(const char *name) {
733
return functions->FindClass(this, name);
735
jclass GetSuperclass(jclass sub) {
736
return functions->GetSuperclass(this, sub);
738
jboolean IsAssignableFrom(jclass sub, jclass sup) {
739
return functions->IsAssignableFrom(this, sub, sup);
742
jint _Throw(jthrowable obj) {
743
return functions->_Throw(this, obj);
745
jint ThrowNew(jclass clazz, const char *msg) {
746
return functions->ThrowNew(this, clazz, msg);
748
jthrowable ExceptionOccurred() {
749
return functions->ExceptionOccurred(this);
751
void ExceptionDescribe() {
752
functions->ExceptionDescribe(this);
754
void ExceptionClear() {
755
functions->ExceptionClear(this);
757
void FatalError(const char *msg) {
758
functions->FatalError(this, msg);
761
jobject NewGlobalRef(jobject lobj) {
762
return functions->NewGlobalRef(this,lobj);
764
void DeleteGlobalRef(jobject gref) {
765
functions->DeleteGlobalRef(this,gref);
767
void DeleteLocalRef(jobject obj) {
768
functions->DeleteLocalRef(this, obj);
771
jboolean IsSameObject(jobject obj1, jobject obj2) {
772
return functions->IsSameObject(this,obj1,obj2);
775
jobject AllocObject(jclass clazz) {
776
return functions->AllocObject(this,clazz);
778
jobject NewObject(jclass clazz, jmethodID methodID, ...) {
781
va_start(args, methodID);
782
result = functions->NewObjectV(this,clazz,methodID,args);
786
jobject NewObjectV(jclass clazz, jmethodID methodID,
788
return functions->NewObjectV(this,clazz,methodID,args);
790
jobject NewObjectA(jclass clazz, jmethodID methodID,
792
return functions->NewObjectA(this,clazz,methodID,args);
795
jclass GetObjectClass(jobject obj) {
796
return functions->GetObjectClass(this,obj);
798
jboolean IsInstanceOf(jobject obj, jclass clazz) {
799
return functions->IsInstanceOf(this,obj,clazz);
802
jmethodID GetMethodID(jclass clazz, const char *name,
804
return functions->GetMethodID(this,clazz,name,sig);
807
jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {
810
va_start(args,methodID);
811
result = functions->CallObjectMethodV(this,obj,methodID,args);
815
jobject CallObjectMethodV(jobject obj, jmethodID methodID,
817
return functions->CallObjectMethodV(this,obj,methodID,args);
819
jobject CallObjectMethodA(jobject obj, jmethodID methodID,
821
return functions->CallObjectMethodA(this,obj,methodID,args);
824
jboolean CallBooleanMethod(jobject obj,
825
jmethodID methodID, ...) {
828
va_start(args,methodID);
829
result = functions->CallBooleanMethodV(this,obj,methodID,args);
833
jboolean CallBooleanMethodV(jobject obj, jmethodID methodID,
835
return functions->CallBooleanMethodV(this,obj,methodID,args);
837
jboolean CallBooleanMethodA(jobject obj, jmethodID methodID,
839
return functions->CallBooleanMethodA(this,obj,methodID, args);
842
jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {
845
va_start(args,methodID);
846
result = functions->CallByteMethodV(this,obj,methodID,args);
850
jbyte CallByteMethodV(jobject obj, jmethodID methodID,
852
return functions->CallByteMethodV(this,obj,methodID,args);
854
jbyte CallByteMethodA(jobject obj, jmethodID methodID,
856
return functions->CallByteMethodA(this,obj,methodID,args);
859
jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {
862
va_start(args,methodID);
863
result = functions->CallCharMethodV(this,obj,methodID,args);
867
jchar CallCharMethodV(jobject obj, jmethodID methodID,
869
return functions->CallCharMethodV(this,obj,methodID,args);
871
jchar CallCharMethodA(jobject obj, jmethodID methodID,
873
return functions->CallCharMethodA(this,obj,methodID,args);
876
jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {
879
va_start(args,methodID);
880
result = functions->CallShortMethodV(this,obj,methodID,args);
884
jshort CallShortMethodV(jobject obj, jmethodID methodID,
886
return functions->CallShortMethodV(this,obj,methodID,args);
888
jshort CallShortMethodA(jobject obj, jmethodID methodID,
890
return functions->CallShortMethodA(this,obj,methodID,args);
893
jint CallIntMethod(jobject obj, jmethodID methodID, ...) {
896
va_start(args,methodID);
897
result = functions->CallIntMethodV(this,obj,methodID,args);
901
jint CallIntMethodV(jobject obj, jmethodID methodID,
903
return functions->CallIntMethodV(this,obj,methodID,args);
905
jint CallIntMethodA(jobject obj, jmethodID methodID,
907
return functions->CallIntMethodA(this,obj,methodID,args);
910
jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {
913
va_start(args,methodID);
914
result = functions->CallLongMethodV(this,obj,methodID,args);
918
jlong CallLongMethodV(jobject obj, jmethodID methodID,
920
return functions->CallLongMethodV(this,obj,methodID,args);
922
jlong CallLongMethodA(jobject obj, jmethodID methodID,
924
return functions->CallLongMethodA(this,obj,methodID,args);
927
jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {
930
va_start(args,methodID);
931
result = functions->CallFloatMethodV(this,obj,methodID,args);
935
jfloat CallFloatMethodV(jobject obj, jmethodID methodID,
937
return functions->CallFloatMethodV(this,obj,methodID,args);
939
jfloat CallFloatMethodA(jobject obj, jmethodID methodID,
941
return functions->CallFloatMethodA(this,obj,methodID,args);
944
jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {
947
va_start(args,methodID);
948
result = functions->CallDoubleMethodV(this,obj,methodID,args);
952
jdouble CallDoubleMethodV(jobject obj, jmethodID methodID,
954
return functions->CallDoubleMethodV(this,obj,methodID,args);
956
jdouble CallDoubleMethodA(jobject obj, jmethodID methodID,
958
return functions->CallDoubleMethodA(this,obj,methodID,args);
961
void CallVoidMethod(jobject obj, jmethodID methodID, ...) {
963
va_start(args,methodID);
964
functions->CallVoidMethodV(this,obj,methodID,args);
967
void CallVoidMethodV(jobject obj, jmethodID methodID,
969
functions->CallVoidMethodV(this,obj,methodID,args);
971
void CallVoidMethodA(jobject obj, jmethodID methodID,
973
functions->CallVoidMethodA(this,obj,methodID,args);
976
jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz,
977
jmethodID methodID, ...) {
980
va_start(args,methodID);
981
result = functions->CallNonvirtualObjectMethodV(this,obj,clazz,
986
jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz,
987
jmethodID methodID, va_list args) {
988
return functions->CallNonvirtualObjectMethodV(this,obj,clazz,
991
jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz,
992
jmethodID methodID, jvalue * args) {
993
return functions->CallNonvirtualObjectMethodA(this,obj,clazz,
997
jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz,
998
jmethodID methodID, ...) {
1001
va_start(args,methodID);
1002
result = functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
1007
jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz,
1008
jmethodID methodID, va_list args) {
1009
return functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
1012
jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz,
1013
jmethodID methodID, jvalue * args) {
1014
return functions->CallNonvirtualBooleanMethodA(this,obj,clazz,
1018
jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz,
1019
jmethodID methodID, ...) {
1022
va_start(args,methodID);
1023
result = functions->CallNonvirtualByteMethodV(this,obj,clazz,
1028
jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz,
1029
jmethodID methodID, va_list args) {
1030
return functions->CallNonvirtualByteMethodV(this,obj,clazz,
1033
jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz,
1034
jmethodID methodID, jvalue * args) {
1035
return functions->CallNonvirtualByteMethodA(this,obj,clazz,
1039
jchar CallNonvirtualCharMethod(jobject obj, jclass clazz,
1040
jmethodID methodID, ...) {
1043
va_start(args,methodID);
1044
result = functions->CallNonvirtualCharMethodV(this,obj,clazz,
1049
jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz,
1050
jmethodID methodID, va_list args) {
1051
return functions->CallNonvirtualCharMethodV(this,obj,clazz,
1054
jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz,
1055
jmethodID methodID, jvalue * args) {
1056
return functions->CallNonvirtualCharMethodA(this,obj,clazz,
1060
jshort CallNonvirtualShortMethod(jobject obj, jclass clazz,
1061
jmethodID methodID, ...) {
1064
va_start(args,methodID);
1065
result = functions->CallNonvirtualShortMethodV(this,obj,clazz,
1070
jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz,
1071
jmethodID methodID, va_list args) {
1072
return functions->CallNonvirtualShortMethodV(this,obj,clazz,
1075
jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,
1076
jmethodID methodID, jvalue * args) {
1077
return functions->CallNonvirtualShortMethodA(this,obj,clazz,
1081
jint CallNonvirtualIntMethod(jobject obj, jclass clazz,
1082
jmethodID methodID, ...) {
1085
va_start(args,methodID);
1086
result = functions->CallNonvirtualIntMethodV(this,obj,clazz,
1091
jint CallNonvirtualIntMethodV(jobject obj, jclass clazz,
1092
jmethodID methodID, va_list args) {
1093
return functions->CallNonvirtualIntMethodV(this,obj,clazz,
1096
jint CallNonvirtualIntMethodA(jobject obj, jclass clazz,
1097
jmethodID methodID, jvalue * args) {
1098
return functions->CallNonvirtualIntMethodA(this,obj,clazz,
1102
jlong CallNonvirtualLongMethod(jobject obj, jclass clazz,
1103
jmethodID methodID, ...) {
1106
va_start(args,methodID);
1107
result = functions->CallNonvirtualLongMethodV(this,obj,clazz,
1112
jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz,
1113
jmethodID methodID, va_list args) {
1114
return functions->CallNonvirtualLongMethodV(this,obj,clazz,
1117
jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz,
1118
jmethodID methodID, jvalue * args) {
1119
return functions->CallNonvirtualLongMethodA(this,obj,clazz,
1123
jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz,
1124
jmethodID methodID, ...) {
1127
va_start(args,methodID);
1128
result = functions->CallNonvirtualFloatMethodV(this,obj,clazz,
1133
jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz,
1136
return functions->CallNonvirtualFloatMethodV(this,obj,clazz,
1139
jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz,
1142
return functions->CallNonvirtualFloatMethodA(this,obj,clazz,
1146
jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz,
1147
jmethodID methodID, ...) {
1150
va_start(args,methodID);
1151
result = functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
1156
jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz,
1159
return functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
1162
jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz,
1165
return functions->CallNonvirtualDoubleMethodA(this,obj,clazz,
1169
void CallNonvirtualVoidMethod(jobject obj, jclass clazz,
1170
jmethodID methodID, ...) {
1172
va_start(args,methodID);
1173
functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
1176
void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,
1179
functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
1181
void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,
1184
functions->CallNonvirtualVoidMethodA(this,obj,clazz,methodID,args);
1187
jfieldID GetFieldID(jclass clazz, const char *name,
1189
return functions->GetFieldID(this,clazz,name,sig);
1192
jobject GetObjectField(jobject obj, jfieldID fieldID) {
1193
return functions->GetObjectField(this,obj,fieldID);
1195
jboolean GetBooleanField(jobject obj, jfieldID fieldID) {
1196
return functions->GetBooleanField(this,obj,fieldID);
1198
jbyte GetByteField(jobject obj, jfieldID fieldID) {
1199
return functions->GetByteField(this,obj,fieldID);
1201
jchar GetCharField(jobject obj, jfieldID fieldID) {
1202
return functions->GetCharField(this,obj,fieldID);
1204
jshort GetShortField(jobject obj, jfieldID fieldID) {
1205
return functions->GetShortField(this,obj,fieldID);
1207
jint GetIntField(jobject obj, jfieldID fieldID) {
1208
return functions->GetIntField(this,obj,fieldID);
1210
jlong GetLongField(jobject obj, jfieldID fieldID) {
1211
return functions->GetLongField(this,obj,fieldID);
1213
jfloat GetFloatField(jobject obj, jfieldID fieldID) {
1214
return functions->GetFloatField(this,obj,fieldID);
1216
jdouble GetDoubleField(jobject obj, jfieldID fieldID) {
1217
return functions->GetDoubleField(this,obj,fieldID);
1220
void SetObjectField(jobject obj, jfieldID fieldID, jobject val) {
1221
functions->SetObjectField(this,obj,fieldID,val);
1223
void SetBooleanField(jobject obj, jfieldID fieldID,
1225
functions->SetBooleanField(this,obj,fieldID,val);
1227
void SetByteField(jobject obj, jfieldID fieldID,
1229
functions->SetByteField(this,obj,fieldID,val);
1231
void SetCharField(jobject obj, jfieldID fieldID,
1233
functions->SetCharField(this,obj,fieldID,val);
1235
void SetShortField(jobject obj, jfieldID fieldID,
1237
functions->SetShortField(this,obj,fieldID,val);
1239
void SetIntField(jobject obj, jfieldID fieldID,
1241
functions->SetIntField(this,obj,fieldID,val);
1243
void SetLongField(jobject obj, jfieldID fieldID,
1245
functions->SetLongField(this,obj,fieldID,val);
1247
void SetFloatField(jobject obj, jfieldID fieldID,
1249
functions->SetFloatField(this,obj,fieldID,val);
1251
void SetDoubleField(jobject obj, jfieldID fieldID,
1253
functions->SetDoubleField(this,obj,fieldID,val);
1256
jmethodID GetStaticMethodID(jclass clazz, const char *name,
1258
return functions->GetStaticMethodID(this,clazz,name,sig);
1261
jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID,
1265
va_start(args,methodID);
1266
result = functions->CallStaticObjectMethodV(this,clazz,methodID,args);
1270
jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID,
1272
return functions->CallStaticObjectMethodV(this,clazz,methodID,args);
1274
jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID,
1276
return functions->CallStaticObjectMethodA(this,clazz,methodID,args);
1279
jboolean CallStaticBooleanMethod(jclass clazz,
1280
jmethodID methodID, ...) {
1283
va_start(args,methodID);
1284
result = functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
1288
jboolean CallStaticBooleanMethodV(jclass clazz,
1289
jmethodID methodID, va_list args) {
1290
return functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
1292
jboolean CallStaticBooleanMethodA(jclass clazz,
1293
jmethodID methodID, jvalue *args) {
1294
return functions->CallStaticBooleanMethodA(this,clazz,methodID,args);
1297
jbyte CallStaticByteMethod(jclass clazz,
1298
jmethodID methodID, ...) {
1301
va_start(args,methodID);
1302
result = functions->CallStaticByteMethodV(this,clazz,methodID,args);
1306
jbyte CallStaticByteMethodV(jclass clazz,
1307
jmethodID methodID, va_list args) {
1308
return functions->CallStaticByteMethodV(this,clazz,methodID,args);
1310
jbyte CallStaticByteMethodA(jclass clazz,
1311
jmethodID methodID, jvalue *args) {
1312
return functions->CallStaticByteMethodA(this,clazz,methodID,args);
1315
jchar CallStaticCharMethod(jclass clazz,
1316
jmethodID methodID, ...) {
1319
va_start(args,methodID);
1320
result = functions->CallStaticCharMethodV(this,clazz,methodID,args);
1324
jchar CallStaticCharMethodV(jclass clazz,
1325
jmethodID methodID, va_list args) {
1326
return functions->CallStaticCharMethodV(this,clazz,methodID,args);
1328
jchar CallStaticCharMethodA(jclass clazz,
1329
jmethodID methodID, jvalue *args) {
1330
return functions->CallStaticCharMethodA(this,clazz,methodID,args);
1333
jshort CallStaticShortMethod(jclass clazz,
1334
jmethodID methodID, ...) {
1337
va_start(args,methodID);
1338
result = functions->CallStaticShortMethodV(this,clazz,methodID,args);
1342
jshort CallStaticShortMethodV(jclass clazz,
1343
jmethodID methodID, va_list args) {
1344
return functions->CallStaticShortMethodV(this,clazz,methodID,args);
1346
jshort CallStaticShortMethodA(jclass clazz,
1347
jmethodID methodID, jvalue *args) {
1348
return functions->CallStaticShortMethodA(this,clazz,methodID,args);
1351
jint CallStaticIntMethod(jclass clazz,
1352
jmethodID methodID, ...) {
1355
va_start(args,methodID);
1356
result = functions->CallStaticIntMethodV(this,clazz,methodID,args);
1360
jint CallStaticIntMethodV(jclass clazz,
1361
jmethodID methodID, va_list args) {
1362
return functions->CallStaticIntMethodV(this,clazz,methodID,args);
1364
jint CallStaticIntMethodA(jclass clazz,
1365
jmethodID methodID, jvalue *args) {
1366
return functions->CallStaticIntMethodA(this,clazz,methodID,args);
1369
jlong CallStaticLongMethod(jclass clazz,
1370
jmethodID methodID, ...) {
1373
va_start(args,methodID);
1374
result = functions->CallStaticLongMethodV(this,clazz,methodID,args);
1378
jlong CallStaticLongMethodV(jclass clazz,
1379
jmethodID methodID, va_list args) {
1380
return functions->CallStaticLongMethodV(this,clazz,methodID,args);
1382
jlong CallStaticLongMethodA(jclass clazz,
1383
jmethodID methodID, jvalue *args) {
1384
return functions->CallStaticLongMethodA(this,clazz,methodID,args);
1387
jfloat CallStaticFloatMethod(jclass clazz,
1388
jmethodID methodID, ...) {
1391
va_start(args,methodID);
1392
result = functions->CallStaticFloatMethodV(this,clazz,methodID,args);
1396
jfloat CallStaticFloatMethodV(jclass clazz,
1397
jmethodID methodID, va_list args) {
1398
return functions->CallStaticFloatMethodV(this,clazz,methodID,args);
1400
jfloat CallStaticFloatMethodA(jclass clazz,
1401
jmethodID methodID, jvalue *args) {
1402
return functions->CallStaticFloatMethodA(this,clazz,methodID,args);
1405
jdouble CallStaticDoubleMethod(jclass clazz,
1406
jmethodID methodID, ...) {
1409
va_start(args,methodID);
1410
result = functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
1414
jdouble CallStaticDoubleMethodV(jclass clazz,
1415
jmethodID methodID, va_list args) {
1416
return functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
1418
jdouble CallStaticDoubleMethodA(jclass clazz,
1419
jmethodID methodID, jvalue *args) {
1420
return functions->CallStaticDoubleMethodA(this,clazz,methodID,args);
1423
void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {
1425
va_start(args,methodID);
1426
functions->CallStaticVoidMethodV(this,cls,methodID,args);
1429
void CallStaticVoidMethodV(jclass cls, jmethodID methodID,
1431
functions->CallStaticVoidMethodV(this,cls,methodID,args);
1433
void CallStaticVoidMethodA(jclass cls, jmethodID methodID,
1435
functions->CallStaticVoidMethodA(this,cls,methodID,args);
1438
jfieldID GetStaticFieldID(jclass clazz, const char *name,
1440
return functions->GetStaticFieldID(this,clazz,name,sig);
1442
jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) {
1443
return functions->GetStaticObjectField(this,clazz,fieldID);
1445
jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) {
1446
return functions->GetStaticBooleanField(this,clazz,fieldID);
1448
jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) {
1449
return functions->GetStaticByteField(this,clazz,fieldID);
1451
jchar GetStaticCharField(jclass clazz, jfieldID fieldID) {
1452
return functions->GetStaticCharField(this,clazz,fieldID);
1454
jshort GetStaticShortField(jclass clazz, jfieldID fieldID) {
1455
return functions->GetStaticShortField(this,clazz,fieldID);
1457
jint GetStaticIntField(jclass clazz, jfieldID fieldID) {
1458
return functions->GetStaticIntField(this,clazz,fieldID);
1460
jlong GetStaticLongField(jclass clazz, jfieldID fieldID) {
1461
return functions->GetStaticLongField(this,clazz,fieldID);
1463
jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) {
1464
return functions->GetStaticFloatField(this,clazz,fieldID);
1466
jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) {
1467
return functions->GetStaticDoubleField(this,clazz,fieldID);
1470
void SetStaticObjectField(jclass clazz, jfieldID fieldID,
1472
functions->SetStaticObjectField(this,clazz,fieldID,value);
1474
void SetStaticBooleanField(jclass clazz, jfieldID fieldID,
1476
functions->SetStaticBooleanField(this,clazz,fieldID,value);
1478
void SetStaticByteField(jclass clazz, jfieldID fieldID,
1480
functions->SetStaticByteField(this,clazz,fieldID,value);
1482
void SetStaticCharField(jclass clazz, jfieldID fieldID,
1484
functions->SetStaticCharField(this,clazz,fieldID,value);
1486
void SetStaticShortField(jclass clazz, jfieldID fieldID,
1488
functions->SetStaticShortField(this,clazz,fieldID,value);
1490
void SetStaticIntField(jclass clazz, jfieldID fieldID,
1492
functions->SetStaticIntField(this,clazz,fieldID,value);
1494
void SetStaticLongField(jclass clazz, jfieldID fieldID,
1496
functions->SetStaticLongField(this,clazz,fieldID,value);
1498
void SetStaticFloatField(jclass clazz, jfieldID fieldID,
1500
functions->SetStaticFloatField(this,clazz,fieldID,value);
1502
void SetStaticDoubleField(jclass clazz, jfieldID fieldID,
1504
functions->SetStaticDoubleField(this,clazz,fieldID,value);
1507
jstring NewString(const jchar *unicode, jsize len) {
1508
return functions->NewString(this,unicode,len);
1510
jsize GetStringLength(jstring str) {
1511
return functions->GetStringLength(this,str);
1513
const jchar *GetStringChars(jstring str, jboolean *isCopy) {
1514
return functions->GetStringChars(this,str,isCopy);
1516
void ReleaseStringChars(jstring str, const jchar *chars) {
1517
functions->ReleaseStringChars(this,str,chars);
1520
jstring NewStringUTF(const char *utf) {
1521
return functions->NewStringUTF(this,utf);
1523
jsize GetStringUTFLength(jstring str) {
1524
return functions->GetStringUTFLength(this,str);
1526
const char* GetStringUTFChars(jstring str, jboolean *isCopy) {
1527
return functions->GetStringUTFChars(this,str,isCopy);
1529
void ReleaseStringUTFChars(jstring str, const char* chars) {
1530
functions->ReleaseStringUTFChars(this,str,chars);
1533
jsize GetArrayLength(jarray array) {
1534
return functions->GetArrayLength(this,array);
1537
jobjectArray NewObjectArray(jsize len, jclass clazz,
1539
return functions->NewObjectArray(this,len,clazz,init);
1541
jobject GetObjectArrayElement(jobjectArray array, jsize index) {
1542
return functions->GetObjectArrayElement(this,array,index);
1544
void SetObjectArrayElement(jobjectArray array, jsize index,
1546
functions->SetObjectArrayElement(this,array,index,val);
1549
jbooleanArray NewBooleanArray(jsize len) {
1550
return functions->NewBooleanArray(this,len);
1552
jbyteArray NewByteArray(jsize len) {
1553
return functions->NewByteArray(this,len);
1555
jcharArray NewCharArray(jsize len) {
1556
return functions->NewCharArray(this,len);
1558
jshortArray NewShortArray(jsize len) {
1559
return functions->NewShortArray(this,len);
1561
jintArray NewIntArray(jsize len) {
1562
return functions->NewIntArray(this,len);
1564
jlongArray NewLongArray(jsize len) {
1565
return functions->NewLongArray(this,len);
1567
jfloatArray NewFloatArray(jsize len) {
1568
return functions->NewFloatArray(this,len);
1570
jdoubleArray NewDoubleArray(jsize len) {
1571
return functions->NewDoubleArray(this,len);
1574
jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) {
1575
return functions->GetBooleanArrayElements(this,array,isCopy);
1577
jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) {
1578
return functions->GetByteArrayElements(this,array,isCopy);
1580
jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) {
1581
return functions->GetCharArrayElements(this,array,isCopy);
1583
jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) {
1584
return functions->GetShortArrayElements(this,array,isCopy);
1586
jint * GetIntArrayElements(jintArray array, jboolean *isCopy) {
1587
return functions->GetIntArrayElements(this,array,isCopy);
1589
jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) {
1590
return functions->GetLongArrayElements(this,array,isCopy);
1592
jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) {
1593
return functions->GetFloatArrayElements(this,array,isCopy);
1595
jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) {
1596
return functions->GetDoubleArrayElements(this,array,isCopy);
1599
void ReleaseBooleanArrayElements(jbooleanArray array,
1602
functions->ReleaseBooleanArrayElements(this,array,elems,mode);
1604
void ReleaseByteArrayElements(jbyteArray array,
1607
functions->ReleaseByteArrayElements(this,array,elems,mode);
1609
void ReleaseCharArrayElements(jcharArray array,
1612
functions->ReleaseCharArrayElements(this,array,elems,mode);
1614
void ReleaseShortArrayElements(jshortArray array,
1617
functions->ReleaseShortArrayElements(this,array,elems,mode);
1619
void ReleaseIntArrayElements(jintArray array,
1622
functions->ReleaseIntArrayElements(this,array,elems,mode);
1624
void ReleaseLongArrayElements(jlongArray array,
1627
functions->ReleaseLongArrayElements(this,array,elems,mode);
1629
void ReleaseFloatArrayElements(jfloatArray array,
1632
functions->ReleaseFloatArrayElements(this,array,elems,mode);
1634
void ReleaseDoubleArrayElements(jdoubleArray array,
1637
functions->ReleaseDoubleArrayElements(this,array,elems,mode);
1640
void GetBooleanArrayRegion(jbooleanArray array,
1641
jsize start, jsize len, jboolean *buf) {
1642
functions->GetBooleanArrayRegion(this,array,start,len,buf);
1644
void GetByteArrayRegion(jbyteArray array,
1645
jsize start, jsize len, jbyte *buf) {
1646
functions->GetByteArrayRegion(this,array,start,len,buf);
1648
void GetCharArrayRegion(jcharArray array,
1649
jsize start, jsize len, jchar *buf) {
1650
functions->GetCharArrayRegion(this,array,start,len,buf);
1652
void GetShortArrayRegion(jshortArray array,
1653
jsize start, jsize len, jshort *buf) {
1654
functions->GetShortArrayRegion(this,array,start,len,buf);
1656
void GetIntArrayRegion(jintArray array,
1657
jsize start, jsize len, jint *buf) {
1658
functions->GetIntArrayRegion(this,array,start,len,buf);
1660
void GetLongArrayRegion(jlongArray array,
1661
jsize start, jsize len, jlong *buf) {
1662
functions->GetLongArrayRegion(this,array,start,len,buf);
1664
void GetFloatArrayRegion(jfloatArray array,
1665
jsize start, jsize len, jfloat *buf) {
1666
functions->GetFloatArrayRegion(this,array,start,len,buf);
1668
void GetDoubleArrayRegion(jdoubleArray array,
1669
jsize start, jsize len, jdouble *buf) {
1670
functions->GetDoubleArrayRegion(this,array,start,len,buf);
1673
void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,
1675
functions->SetBooleanArrayRegion(this,array,start,len,buf);
1677
void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,
1679
functions->SetByteArrayRegion(this,array,start,len,buf);
1681
void SetCharArrayRegion(jcharArray array, jsize start, jsize len,
1683
functions->SetCharArrayRegion(this,array,start,len,buf);
1685
void SetShortArrayRegion(jshortArray array, jsize start, jsize len,
1687
functions->SetShortArrayRegion(this,array,start,len,buf);
1689
void SetIntArrayRegion(jintArray array, jsize start, jsize len,
1691
functions->SetIntArrayRegion(this,array,start,len,buf);
1693
void SetLongArrayRegion(jlongArray array, jsize start, jsize len,
1695
functions->SetLongArrayRegion(this,array,start,len,buf);
1697
void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,
1699
functions->SetFloatArrayRegion(this,array,start,len,buf);
1701
void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
1703
functions->SetDoubleArrayRegion(this,array,start,len,buf);
1706
jint RegisterNatives(jclass clazz, const JNINativeMethod *methods,
1708
return functions->RegisterNatives(this,clazz,methods,nMethods);
1710
jint UnregisterNatives(jclass clazz) {
1711
return functions->UnregisterNatives(this,clazz);
1714
jint MonitorEnter(jobject obj) {
1715
return functions->MonitorEnter(this,obj);
1717
jint MonitorExit(jobject obj) {
1718
return functions->MonitorExit(this,obj);
1721
jint GetJavaVM(JavaVM **vm) {
1722
return functions->GetJavaVM(this,vm);
1725
#endif /* __cplusplus */
1728
/* These structures will be VM-specific. */
1730
typedef struct JDK1_1InitArgs {
1735
jint nativeStackSize;
1742
jint (*vfprintf)(FILE *fp, const char *format, va_list args);
1743
void (*exit)(jint code);
1747
jint enableVerboseGC;
1748
jint disableAsyncGC;
1754
typedef struct JDK1_1AttachArgs {
1755
void * __padding; /* C compilers don't allow empty structures. */
1758
/* End VM-specific. */
1760
struct JNIInvokeInterface_ {
1765
jint (*DestroyJavaVM)(JavaVM *vm);
1767
jint (*AttachCurrentThread)
1768
(JavaVM *vm, JNIEnv **penv, void *args);
1770
jint (*DetachCurrentThread)(JavaVM *vm);
1774
const struct JNIInvokeInterface_ *functions;
1780
jint DestroyJavaVM() {
1781
return functions->DestroyJavaVM(this);
1783
jint AttachCurrentThread(JNIEnv **penv, void *args) {
1784
return functions->AttachCurrentThread(this, penv, args);
1786
jint DetachCurrentThread() {
1787
return functions->DetachCurrentThread(this);
1793
void JNICALL JNI_GetDefaultJavaVMInitArgs(void *);
1795
jint JNICALL JNI_CreateJavaVM(JavaVM **, JNIEnv **, void *);
1797
jint JNICALL JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);
1801
#endif /* __cplusplus */