jni.h
上传用户:goldcmy89
上传日期:2017-12-03
资源大小:2246k
文件大小:62k
源码类别:

PlugIns编程

开发平台:

Visual C++

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is the Java Runtime Interface.
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  * Netscape Communications Corporation and Sun Microsystems, Inc.
  18.  * Portions created by the Initial Developer are Copyright (C) 1993-1996
  19.  * the Initial Developer. All Rights Reserved.
  20.  *
  21.  * Contributor(s):
  22.  *
  23.  * Alternatively, the contents of this file may be used under the terms of
  24.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  25.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  26.  * in which case the provisions of the GPL or the LGPL are applicable instead
  27.  * of those above. If you wish to allow use of your version of this file only
  28.  * under the terms of either the GPL or the LGPL, and not to allow others to
  29.  * use your version of this file under the terms of the MPL, indicate your
  30.  * decision by deleting the provisions above and replace them with the notice
  31.  * and other provisions required by the GPL or the LGPL. If you do not delete
  32.  * the provisions above, a recipient may use your version of this file under
  33.  * the terms of any one of the MPL, the GPL or the LGPL.
  34.  *
  35.  * ***** END LICENSE BLOCK ***** */
  36. #ifndef JNI_H
  37. #define JNI_H
  38. #include <stdio.h>
  39. #include <stdarg.h>
  40. /* jni_md.h contains the machine-dependent typedefs for jbyte, jint 
  41.    and jlong */ 
  42. #include "jni_md.h"
  43. #ifdef __cplusplus
  44. extern "C" {
  45. #endif
  46. /*
  47.  * JNI Types
  48.  */
  49. typedef unsigned char jboolean;
  50. typedef unsigned short jchar;
  51. typedef short jshort;
  52. typedef float jfloat;
  53. typedef double jdouble;
  54. typedef jint            jsize;
  55. #ifdef __cplusplus
  56. class _jobject {};
  57. class _jclass : public _jobject {};
  58. class _jthrowable : public _jobject {};
  59. class _jstring : public _jobject {};
  60. class _jarray : public _jobject {};
  61. class _jbooleanArray : public _jarray {};
  62. class _jbyteArray : public _jarray {};
  63. class _jcharArray : public _jarray {};
  64. class _jshortArray : public _jarray {};
  65. class _jintArray : public _jarray {};
  66. class _jlongArray : public _jarray {};
  67. class _jfloatArray : public _jarray {};
  68. class _jdoubleArray : public _jarray {};
  69. class _jobjectArray : public _jarray {};
  70. typedef _jobject *jobject;
  71. typedef _jclass *jclass;
  72. typedef _jthrowable *jthrowable;
  73. typedef _jstring *jstring;
  74. typedef _jarray *jarray;
  75. typedef _jbooleanArray *jbooleanArray;
  76. typedef _jbyteArray *jbyteArray;
  77. typedef _jcharArray *jcharArray;
  78. typedef _jshortArray *jshortArray;
  79. typedef _jintArray *jintArray;
  80. typedef _jlongArray *jlongArray;
  81. typedef _jfloatArray *jfloatArray;
  82. typedef _jdoubleArray *jdoubleArray;
  83. typedef _jobjectArray *jobjectArray;
  84. #else
  85. struct _jobject;
  86. typedef struct _jobject *jobject;
  87. typedef jobject jclass;
  88. typedef jobject jthrowable;
  89. typedef jobject jstring;
  90. typedef jobject jarray;
  91. typedef jarray jbooleanArray;
  92. typedef jarray jbyteArray;
  93. typedef jarray jcharArray;
  94. typedef jarray jshortArray;
  95. typedef jarray jintArray;
  96. typedef jarray jlongArray;
  97. typedef jarray jfloatArray;
  98. typedef jarray jdoubleArray;
  99. typedef jarray jobjectArray;
  100. #endif
  101. #if 0 /* moved to jri_md.h */
  102. typedef jobject jref; /* For transition---not meant to be part of public 
  103.  API anymore.*/
  104. #endif
  105. typedef union jvalue {
  106.     jboolean z;
  107.     jbyte    b;
  108.     jchar    c;
  109.     jshort   s;
  110.     jint     i;
  111.     jlong    j;
  112.     jfloat   f;
  113.     jdouble  d;
  114.     jobject  l;
  115. } jvalue;
  116. struct _jfieldID;
  117. typedef struct _jfieldID *jfieldID;
  118. struct _jmethodID;
  119. typedef struct _jmethodID *jmethodID;
  120. /*
  121.  * jboolean constants
  122.  */
  123. #define JNI_FALSE 0
  124. #define JNI_TRUE 1
  125. /*
  126.  * possible return values for JNI functions.
  127.  */
  128. #define JNI_OK 0
  129. #define JNI_ERR (-1)
  130. /*
  131.  * used in ReleaseScalarArrayElements
  132.  */
  133.   
  134. #define JNI_COMMIT 1
  135. #define JNI_ABORT 2
  136. /*
  137.  * used in RegisterNatives to describe native method name, signature,
  138.  * and function pointer.
  139.  */
  140. typedef struct {
  141.     char *name;
  142.     char *signature;
  143.     void *fnPtr;
  144. } JNINativeMethod;
  145. /*
  146.  * JNI Native Method Interface.
  147.  */
  148. struct JNINativeInterface_;
  149. struct JNIEnv_;
  150. #ifdef __cplusplus
  151. typedef JNIEnv_ JNIEnv;
  152. #else
  153. typedef const struct JNINativeInterface_ *JNIEnv;
  154. #endif
  155. /*
  156.  * JNI Invocation Interface.
  157.  */
  158. struct JNIInvokeInterface_;
  159. struct JavaVM_;
  160. #ifdef __cplusplus
  161. typedef JavaVM_ JavaVM;
  162. #else
  163. typedef const struct JNIInvokeInterface_ *JavaVM;
  164. #endif
  165. struct JNINativeInterface_ {
  166.     void *reserved0;
  167.     void *reserved1;
  168.     void *reserved2;
  169.     void *reserved3;
  170.     jint (JNICALL *GetVersion)(JNIEnv *env);
  171.     jclass (JNICALL *DefineClass)
  172.       (JNIEnv *env, const char *name, jobject loader, const jbyte *buf, 
  173.        jsize len);
  174.     jclass (JNICALL *FindClass)
  175.       (JNIEnv *env, const char *name);
  176.     void *reserved4;
  177.     void *reserved5;
  178.     void *reserved6;
  179.     jclass (JNICALL *GetSuperclass)
  180.       (JNIEnv *env, jclass sub);
  181.     jboolean (JNICALL *IsAssignableFrom)
  182.       (JNIEnv *env, jclass sub, jclass sup);
  183.     void *reserved7;
  184.     jint (JNICALL *Throw)
  185.       (JNIEnv *env, jthrowable obj);
  186.     jint (JNICALL *ThrowNew)
  187.       (JNIEnv *env, jclass clazz, const char *msg);
  188.     jthrowable (JNICALL *ExceptionOccurred)
  189.       (JNIEnv *env);
  190.     void (JNICALL *ExceptionDescribe)
  191.       (JNIEnv *env);
  192.     void (JNICALL *ExceptionClear)
  193.       (JNIEnv *env);
  194.     void (JNICALL *FatalError)
  195.       (JNIEnv *env, const char *msg);
  196.     void *reserved8;
  197.     void *reserved9;
  198.     jobject (JNICALL *NewGlobalRef)
  199.       (JNIEnv *env, jobject lobj);
  200.     void (JNICALL *DeleteGlobalRef)
  201.       (JNIEnv *env, jobject gref);
  202.     void (JNICALL *DeleteLocalRef)
  203.       (JNIEnv *env, jobject obj);
  204.     jboolean (JNICALL *IsSameObject)
  205.       (JNIEnv *env, jobject obj1, jobject obj2);
  206.     void *reserved10;
  207.     void *reserved11;
  208.     jobject (JNICALL *AllocObject)
  209.       (JNIEnv *env, jclass clazz);
  210.     jobject (JNICALL *NewObject)
  211.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  212.     jobject (JNICALL *NewObjectV)
  213.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  214.     jobject (JNICALL *NewObjectA)
  215.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  216.     jclass (JNICALL *GetObjectClass)
  217.       (JNIEnv *env, jobject obj);
  218.     jboolean (JNICALL *IsInstanceOf)
  219.       (JNIEnv *env, jobject obj, jclass clazz);
  220.     jmethodID (JNICALL *GetMethodID)
  221.       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
  222.     jobject (JNICALL *CallObjectMethod)
  223.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  224.     jobject (JNICALL *CallObjectMethodV)
  225.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  226.     jobject (JNICALL *CallObjectMethodA)
  227.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);
  228.     jboolean (JNICALL *CallBooleanMethod)
  229.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  230.     jboolean (JNICALL *CallBooleanMethodV)
  231.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  232.     jboolean (JNICALL *CallBooleanMethodA)
  233.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);
  234.     jbyte (JNICALL *CallByteMethod)
  235.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  236.     jbyte (JNICALL *CallByteMethodV)
  237.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  238.     jbyte (JNICALL *CallByteMethodA)
  239.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
  240.     jchar (JNICALL *CallCharMethod)
  241.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  242.     jchar (JNICALL *CallCharMethodV)
  243.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  244.     jchar (JNICALL *CallCharMethodA)
  245.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
  246.     jshort (JNICALL *CallShortMethod)
  247.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  248.     jshort (JNICALL *CallShortMethodV)
  249.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  250.     jshort (JNICALL *CallShortMethodA)
  251.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
  252.     jint (JNICALL *CallIntMethod)
  253.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  254.     jint (JNICALL *CallIntMethodV)
  255.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  256.     jint (JNICALL *CallIntMethodA)
  257.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
  258.     jlong (JNICALL *CallLongMethod)
  259.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  260.     jlong (JNICALL *CallLongMethodV)
  261.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  262.     jlong (JNICALL *CallLongMethodA)
  263.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
  264.     jfloat (JNICALL *CallFloatMethod)
  265.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  266.     jfloat (JNICALL *CallFloatMethodV)
  267.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  268.     jfloat (JNICALL *CallFloatMethodA)
  269.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
  270.     jdouble (JNICALL *CallDoubleMethod)
  271.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  272.     jdouble (JNICALL *CallDoubleMethodV)
  273.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  274.     jdouble (JNICALL *CallDoubleMethodA)
  275.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);
  276.     void (JNICALL *CallVoidMethod)
  277.       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
  278.     void (JNICALL *CallVoidMethodV)
  279.       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
  280.     void (JNICALL *CallVoidMethodA)
  281.       (JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);
  282.     jobject (JNICALL *CallNonvirtualObjectMethod)
  283.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  284.     jobject (JNICALL *CallNonvirtualObjectMethodV)
  285.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, 
  286.        va_list args);
  287.     jobject (JNICALL *CallNonvirtualObjectMethodA)
  288.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, 
  289.        jvalue * args);
  290.     jboolean (JNICALL *CallNonvirtualBooleanMethod)
  291.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  292.     jboolean (JNICALL *CallNonvirtualBooleanMethodV)
  293.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  294.        va_list args);
  295.     jboolean (JNICALL *CallNonvirtualBooleanMethodA)
  296.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  297.        jvalue * args);
  298.     jbyte (JNICALL *CallNonvirtualByteMethod)
  299.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  300.     jbyte (JNICALL *CallNonvirtualByteMethodV)
  301.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  302.        va_list args);
  303.     jbyte (JNICALL *CallNonvirtualByteMethodA)
  304.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, 
  305.        jvalue *args);
  306.     jchar (JNICALL *CallNonvirtualCharMethod)
  307.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  308.     jchar (JNICALL *CallNonvirtualCharMethodV)
  309.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  310.        va_list args);
  311.     jchar (JNICALL *CallNonvirtualCharMethodA)
  312.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  313.        jvalue *args);
  314.     jshort (JNICALL *CallNonvirtualShortMethod)
  315.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  316.     jshort (JNICALL *CallNonvirtualShortMethodV)
  317.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  318.        va_list args);
  319.     jshort (JNICALL *CallNonvirtualShortMethodA)
  320.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  321.        jvalue *args);
  322.     jint (JNICALL *CallNonvirtualIntMethod)
  323.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  324.     jint (JNICALL *CallNonvirtualIntMethodV)
  325.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  326.        va_list args);
  327.     jint (JNICALL *CallNonvirtualIntMethodA)
  328.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  329.        jvalue *args);
  330.     jlong (JNICALL *CallNonvirtualLongMethod)
  331.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  332.     jlong (JNICALL *CallNonvirtualLongMethodV)
  333.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  334.        va_list args);
  335.     jlong (JNICALL *CallNonvirtualLongMethodA)
  336.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, 
  337.        jvalue *args);
  338.     jfloat (JNICALL *CallNonvirtualFloatMethod)
  339.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  340.     jfloat (JNICALL *CallNonvirtualFloatMethodV)
  341.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  342.        va_list args);
  343.     jfloat (JNICALL *CallNonvirtualFloatMethodA)
  344.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  345.        jvalue *args);
  346.     jdouble (JNICALL *CallNonvirtualDoubleMethod)
  347.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  348.     jdouble (JNICALL *CallNonvirtualDoubleMethodV)
  349.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  350.        va_list args);
  351.     jdouble (JNICALL *CallNonvirtualDoubleMethodA)
  352.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  353.        jvalue *args);
  354.     void (JNICALL *CallNonvirtualVoidMethod)
  355.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
  356.     void (JNICALL *CallNonvirtualVoidMethodV)
  357.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  358.        va_list args);
  359.     void (JNICALL *CallNonvirtualVoidMethodA)
  360.       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
  361.        jvalue * args);
  362.     jfieldID (JNICALL *GetFieldID)
  363.       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
  364.     jobject (JNICALL *GetObjectField)
  365.       (JNIEnv *env, jobject obj, jfieldID fieldID);
  366.     jboolean (JNICALL *GetBooleanField)
  367.       (JNIEnv *env, jobject obj, jfieldID fieldID);
  368.     jbyte (JNICALL *GetByteField)
  369.       (JNIEnv *env, jobject obj, jfieldID fieldID);
  370.     jchar (JNICALL *GetCharField)
  371.       (JNIEnv *env, jobject obj, jfieldID fieldID);
  372.     jshort (JNICALL *GetShortField)
  373.       (JNIEnv *env, jobject obj, jfieldID fieldID);
  374.     jint (JNICALL *GetIntField)
  375.       (JNIEnv *env, jobject obj, jfieldID fieldID);
  376.     jlong (JNICALL *GetLongField)
  377.       (JNIEnv *env, jobject obj, jfieldID fieldID);
  378.     jfloat (JNICALL *GetFloatField)
  379.       (JNIEnv *env, jobject obj, jfieldID fieldID);
  380.     jdouble (JNICALL *GetDoubleField)
  381.       (JNIEnv *env, jobject obj, jfieldID fieldID);
  382.     void (JNICALL *SetObjectField)
  383.       (JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);
  384.     void (JNICALL *SetBooleanField)
  385.       (JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);
  386.     void (JNICALL *SetByteField)
  387.       (JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);
  388.     void (JNICALL *SetCharField)
  389.       (JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);
  390.     void (JNICALL *SetShortField)
  391.       (JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);
  392.     void (JNICALL *SetIntField)
  393.       (JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
  394.     void (JNICALL *SetLongField)
  395.       (JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);
  396.     void (JNICALL *SetFloatField)
  397.       (JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);
  398.     void (JNICALL *SetDoubleField)
  399.       (JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);
  400.     jmethodID (JNICALL *GetStaticMethodID)
  401.       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
  402.     jobject (JNICALL *CallStaticObjectMethod)
  403.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  404.     jobject (JNICALL *CallStaticObjectMethodV)
  405.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  406.     jobject (JNICALL *CallStaticObjectMethodA)
  407.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  408.     jboolean (JNICALL *CallStaticBooleanMethod)
  409.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  410.     jboolean (JNICALL *CallStaticBooleanMethodV)
  411.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  412.     jboolean (JNICALL *CallStaticBooleanMethodA)
  413.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  414.     jbyte (JNICALL *CallStaticByteMethod)
  415.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  416.     jbyte (JNICALL *CallStaticByteMethodV)
  417.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  418.     jbyte (JNICALL *CallStaticByteMethodA)
  419.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  420.     jchar (JNICALL *CallStaticCharMethod)
  421.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  422.     jchar (JNICALL *CallStaticCharMethodV)
  423.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  424.     jchar (JNICALL *CallStaticCharMethodA)
  425.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  426.     jshort (JNICALL *CallStaticShortMethod)
  427.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  428.     jshort (JNICALL *CallStaticShortMethodV)
  429.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  430.     jshort (JNICALL *CallStaticShortMethodA)
  431.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  432.     jint (JNICALL *CallStaticIntMethod)
  433.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  434.     jint (JNICALL *CallStaticIntMethodV)
  435.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  436.     jint (JNICALL *CallStaticIntMethodA)
  437.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  438.     jlong (JNICALL *CallStaticLongMethod)
  439.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  440.     jlong (JNICALL *CallStaticLongMethodV)
  441.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  442.     jlong (JNICALL *CallStaticLongMethodA)
  443.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  444.     jfloat (JNICALL *CallStaticFloatMethod)
  445.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  446.     jfloat (JNICALL *CallStaticFloatMethodV)
  447.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  448.     jfloat (JNICALL *CallStaticFloatMethodA)
  449.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  450.     jdouble (JNICALL *CallStaticDoubleMethod)
  451.       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
  452.     jdouble (JNICALL *CallStaticDoubleMethodV)
  453.       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
  454.     jdouble (JNICALL *CallStaticDoubleMethodA)       
  455.       (JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);
  456.     void (JNICALL *CallStaticVoidMethod)
  457.       (JNIEnv *env, jclass cls, jmethodID methodID, ...);
  458.     void (JNICALL *CallStaticVoidMethodV)
  459.       (JNIEnv *env, jclass cls, jmethodID methodID, va_list args);
  460.     void (JNICALL *CallStaticVoidMethodA)
  461.       (JNIEnv *env, jclass cls, jmethodID methodID, jvalue * args);
  462.     jfieldID (JNICALL *GetStaticFieldID)
  463.       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
  464.     jobject (JNICALL *GetStaticObjectField)
  465.       (JNIEnv *env, jclass clazz, jfieldID fieldID);
  466.     jboolean (JNICALL *GetStaticBooleanField)
  467.       (JNIEnv *env, jclass clazz, jfieldID fieldID);
  468.     jbyte (JNICALL *GetStaticByteField)
  469.       (JNIEnv *env, jclass clazz, jfieldID fieldID);
  470.     jchar (JNICALL *GetStaticCharField)
  471.       (JNIEnv *env, jclass clazz, jfieldID fieldID);
  472.     jshort (JNICALL *GetStaticShortField)
  473.       (JNIEnv *env, jclass clazz, jfieldID fieldID);
  474.     jint (JNICALL *GetStaticIntField)
  475.       (JNIEnv *env, jclass clazz, jfieldID fieldID);
  476.     jlong (JNICALL *GetStaticLongField)
  477.       (JNIEnv *env, jclass clazz, jfieldID fieldID);
  478.     jfloat (JNICALL *GetStaticFloatField)
  479.       (JNIEnv *env, jclass clazz, jfieldID fieldID);
  480.     jdouble (JNICALL *GetStaticDoubleField)
  481.       (JNIEnv *env, jclass clazz, jfieldID fieldID);
  482.     void (JNICALL *SetStaticObjectField)
  483.       (JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value);
  484.     void (JNICALL *SetStaticBooleanField)
  485.       (JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value);
  486.     void (JNICALL *SetStaticByteField)
  487.       (JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value);
  488.     void (JNICALL *SetStaticCharField)
  489.       (JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value);
  490.     void (JNICALL *SetStaticShortField)
  491.       (JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value);
  492.     void (JNICALL *SetStaticIntField)
  493.       (JNIEnv *env, jclass clazz, jfieldID fieldID, jint value);
  494.     void (JNICALL *SetStaticLongField)
  495.       (JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value);
  496.     void (JNICALL *SetStaticFloatField)
  497.       (JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value);
  498.     void (JNICALL *SetStaticDoubleField)
  499.       (JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value);
  500.     jstring (JNICALL *NewString)
  501.       (JNIEnv *env, const jchar *unicode, jsize len);
  502.     jsize (JNICALL *GetStringLength)
  503.       (JNIEnv *env, jstring str);
  504.     const jchar *(JNICALL *GetStringChars)
  505.       (JNIEnv *env, jstring str, jboolean *isCopy);
  506.     void (JNICALL *ReleaseStringChars)
  507.       (JNIEnv *env, jstring str, const jchar *chars);
  508.   
  509.     jstring (JNICALL *NewStringUTF)
  510.       (JNIEnv *env, const char *utf);
  511.     jsize (JNICALL *GetStringUTFLength)
  512.       (JNIEnv *env, jstring str);
  513.     const char* (JNICALL *GetStringUTFChars)
  514.       (JNIEnv *env, jstring str, jboolean *isCopy);
  515.     void (JNICALL *ReleaseStringUTFChars)
  516.       (JNIEnv *env, jstring str, const char* chars);
  517.   
  518.     jsize (JNICALL *GetArrayLength)
  519.       (JNIEnv *env, jarray array);
  520.     jobjectArray (JNICALL *NewObjectArray)
  521.       (JNIEnv *env, jsize len, jclass clazz, jobject init);
  522.     jobject (JNICALL *GetObjectArrayElement)
  523.       (JNIEnv *env, jobjectArray array, jsize index);
  524.     void (JNICALL *SetObjectArrayElement)
  525.       (JNIEnv *env, jobjectArray array, jsize index, jobject val);
  526.     jbooleanArray (JNICALL *NewBooleanArray)
  527.       (JNIEnv *env, jsize len);
  528.     jbyteArray (JNICALL *NewByteArray)
  529.       (JNIEnv *env, jsize len);
  530.     jcharArray (JNICALL *NewCharArray)
  531.       (JNIEnv *env, jsize len);
  532.     jshortArray (JNICALL *NewShortArray)
  533.       (JNIEnv *env, jsize len);
  534.     jintArray (JNICALL *NewIntArray)
  535.       (JNIEnv *env, jsize len);
  536.     jlongArray (JNICALL *NewLongArray)
  537.       (JNIEnv *env, jsize len);
  538.     jfloatArray (JNICALL *NewFloatArray)
  539.       (JNIEnv *env, jsize len);
  540.     jdoubleArray (JNICALL *NewDoubleArray)
  541.       (JNIEnv *env, jsize len);
  542.     jboolean * (JNICALL *GetBooleanArrayElements)
  543.       (JNIEnv *env, jbooleanArray array, jboolean *isCopy);
  544.     jbyte * (JNICALL *GetByteArrayElements)
  545.       (JNIEnv *env, jbyteArray array, jboolean *isCopy);
  546.     jchar * (JNICALL *GetCharArrayElements)
  547.       (JNIEnv *env, jcharArray array, jboolean *isCopy);
  548.     jshort * (JNICALL *GetShortArrayElements)
  549.       (JNIEnv *env, jshortArray array, jboolean *isCopy);
  550.     jint * (JNICALL *GetIntArrayElements)
  551.       (JNIEnv *env, jintArray array, jboolean *isCopy);
  552.     jlong * (JNICALL *GetLongArrayElements)
  553.       (JNIEnv *env, jlongArray array, jboolean *isCopy);
  554.     jfloat * (JNICALL *GetFloatArrayElements)
  555.       (JNIEnv *env, jfloatArray array, jboolean *isCopy);
  556.     jdouble * (JNICALL *GetDoubleArrayElements)
  557.       (JNIEnv *env, jdoubleArray array, jboolean *isCopy);
  558.     void (JNICALL *ReleaseBooleanArrayElements)
  559.       (JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode);
  560.     void (JNICALL *ReleaseByteArrayElements)
  561.       (JNIEnv *env, jbyteArray array, jbyte *elems, jint mode);
  562.     void (JNICALL *ReleaseCharArrayElements)
  563.       (JNIEnv *env, jcharArray array, jchar *elems, jint mode);
  564.     void (JNICALL *ReleaseShortArrayElements)
  565.       (JNIEnv *env, jshortArray array, jshort *elems, jint mode);
  566.     void (JNICALL *ReleaseIntArrayElements)
  567.       (JNIEnv *env, jintArray array, jint *elems, jint mode);
  568.     void (JNICALL *ReleaseLongArrayElements)
  569.       (JNIEnv *env, jlongArray array, jlong *elems, jint mode);
  570.     void (JNICALL *ReleaseFloatArrayElements)
  571.       (JNIEnv *env, jfloatArray array, jfloat *elems, jint mode);
  572.     void (JNICALL *ReleaseDoubleArrayElements)
  573.       (JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode);
  574.     void (JNICALL *GetBooleanArrayRegion)
  575.       (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);
  576.     void (JNICALL *GetByteArrayRegion)
  577.       (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);
  578.     void (JNICALL *GetCharArrayRegion)
  579.       (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);
  580.     void (JNICALL *GetShortArrayRegion)
  581.       (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);
  582.     void (JNICALL *GetIntArrayRegion)
  583.       (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);
  584.     void (JNICALL *GetLongArrayRegion)
  585.       (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);
  586.     void (JNICALL *GetFloatArrayRegion)
  587.       (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);
  588.     void (JNICALL *GetDoubleArrayRegion)
  589.       (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);
  590.     void (JNICALL *SetBooleanArrayRegion)
  591.       (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);
  592.     void (JNICALL *SetByteArrayRegion)
  593.       (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);
  594.     void (JNICALL *SetCharArrayRegion)
  595.       (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);
  596.     void (JNICALL *SetShortArrayRegion)
  597.       (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);
  598.     void (JNICALL *SetIntArrayRegion)
  599.       (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);
  600.     void (JNICALL *SetLongArrayRegion)
  601.       (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);
  602.     void (JNICALL *SetFloatArrayRegion)
  603.       (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);
  604.     void (JNICALL *SetDoubleArrayRegion)
  605.       (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);
  606.     jint (JNICALL *RegisterNatives)
  607.       (JNIEnv *env, jclass clazz, const JNINativeMethod *methods, 
  608.        jint nMethods);
  609.     jint (JNICALL *UnregisterNatives)
  610.       (JNIEnv *env, jclass clazz);
  611.     jint (JNICALL *MonitorEnter)
  612.       (JNIEnv *env, jobject obj);
  613.     jint (JNICALL *MonitorExit)
  614.       (JNIEnv *env, jobject obj);
  615.  
  616.     jint (JNICALL *GetJavaVM)
  617.       (JNIEnv *env, JavaVM **vm);
  618. };
  619. /*
  620.  * We use inlined functions for C++ so that programmers can write:
  621.  * 
  622.  *    env->FindClass("java/lang/String")
  623.  *
  624.  * in C++ rather than:
  625.  *
  626.  *    (*env)->FindClass(env, "java/lang/String")
  627.  *
  628.  * in C.
  629.  */
  630. struct JNIEnv_ {
  631.     const struct JNINativeInterface_ *functions;
  632.     void *reserved0;
  633.     void *reserved1[6];
  634. #ifdef __cplusplus
  635.     jint GetVersion() {
  636.         return functions->GetVersion(this);
  637.     }
  638.     jclass DefineClass(const char *name, jobject loader, const jbyte *buf,
  639.        jsize len) {
  640.         return functions->DefineClass(this, name, loader, buf, len);
  641.     }
  642.     jclass FindClass(const char *name) {
  643.         return functions->FindClass(this, name);
  644.     }
  645.     jclass GetSuperclass(jclass sub) {
  646.         return functions->GetSuperclass(this, sub);
  647.     }
  648.     jboolean IsAssignableFrom(jclass sub, jclass sup) {
  649.         return functions->IsAssignableFrom(this, sub, sup);
  650.     }
  651.     jint Throw(jthrowable obj) {
  652.         return functions->Throw(this, obj);
  653.     }    
  654.     jint ThrowNew(jclass clazz, const char *msg) {
  655.         return functions->ThrowNew(this, clazz, msg);
  656.     }
  657.     jthrowable ExceptionOccurred() {
  658.         return functions->ExceptionOccurred(this);
  659.     }
  660.     void ExceptionDescribe() {
  661.         functions->ExceptionDescribe(this);
  662.     }
  663.     void ExceptionClear() {
  664.         functions->ExceptionClear(this);
  665.     }
  666.     void FatalError(const char *msg) {
  667.         functions->FatalError(this, msg);
  668.     }
  669.     jobject NewGlobalRef(jobject lobj) {
  670.         return functions->NewGlobalRef(this,lobj);
  671.     }
  672.     void DeleteGlobalRef(jobject gref) {
  673.         functions->DeleteGlobalRef(this,gref);
  674.     }
  675.     void DeleteLocalRef(jobject obj) {
  676.         functions->DeleteLocalRef(this, obj);
  677.     }
  678.     jboolean IsSameObject(jobject obj1, jobject obj2) {
  679.         return functions->IsSameObject(this,obj1,obj2);
  680.     }
  681.     jobject AllocObject(jclass clazz) {
  682.         return functions->AllocObject(this,clazz);
  683.     }
  684.     jobject NewObject(jclass clazz, jmethodID methodID, ...) {
  685.         va_list args;
  686. jobject result;
  687. va_start(args, methodID);
  688.         result = functions->NewObjectV(this,clazz,methodID,args);
  689. va_end(args);
  690. return result;
  691.     }
  692.     jobject NewObjectV(jclass clazz, jmethodID methodID, 
  693.        va_list args) {
  694.         return functions->NewObjectV(this,clazz,methodID,args);
  695.     }
  696.     jobject NewObjectA(jclass clazz, jmethodID methodID, 
  697.        jvalue *args) {
  698.         return functions->NewObjectA(this,clazz,methodID,args);
  699.     }
  700.     jclass GetObjectClass(jobject obj) {
  701.         return functions->GetObjectClass(this,obj);
  702.     }
  703.     jboolean IsInstanceOf(jobject obj, jclass clazz) {
  704.         return functions->IsInstanceOf(this,obj,clazz);
  705.     }
  706.     jmethodID GetMethodID(jclass clazz, const char *name, 
  707.   const char *sig) {
  708.         return functions->GetMethodID(this,clazz,name,sig);
  709.     }
  710.     jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {
  711.         va_list args;
  712. jobject result;
  713. va_start(args,methodID);
  714. result = functions->CallObjectMethodV(this,obj,methodID,args);
  715. va_end(args);
  716. return result;
  717.     }
  718.     jobject CallObjectMethodV(jobject obj, jmethodID methodID, 
  719. va_list args) {
  720.         return functions->CallObjectMethodV(this,obj,methodID,args);
  721.     }
  722.     jobject CallObjectMethodA(jobject obj, jmethodID methodID, 
  723. jvalue * args) {
  724.         return functions->CallObjectMethodA(this,obj,methodID,args);
  725.     }
  726.     jboolean CallBooleanMethod(jobject obj, 
  727.        jmethodID methodID, ...) {
  728.         va_list args;
  729. jboolean result;
  730. va_start(args,methodID);
  731. result = functions->CallBooleanMethodV(this,obj,methodID,args);
  732. va_end(args);
  733. return result;
  734.     }
  735.     jboolean CallBooleanMethodV(jobject obj, jmethodID methodID, 
  736. va_list args) {
  737.         return functions->CallBooleanMethodV(this,obj,methodID,args);
  738.     }
  739.     jboolean CallBooleanMethodA(jobject obj, jmethodID methodID, 
  740. jvalue * args) {
  741.         return functions->CallBooleanMethodA(this,obj,methodID, args);
  742.     }
  743.     jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {
  744.         va_list args;
  745. jbyte result;
  746. va_start(args,methodID);
  747. result = functions->CallByteMethodV(this,obj,methodID,args);
  748. va_end(args);
  749. return result;
  750.     }
  751.     jbyte CallByteMethodV(jobject obj, jmethodID methodID, 
  752.   va_list args) {
  753.         return functions->CallByteMethodV(this,obj,methodID,args);
  754.     }
  755.     jbyte CallByteMethodA(jobject obj, jmethodID methodID, 
  756.   jvalue * args) {
  757.         return functions->CallByteMethodA(this,obj,methodID,args);
  758.     }
  759.     jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {
  760.         va_list args;
  761. jchar result;
  762. va_start(args,methodID);
  763. result = functions->CallCharMethodV(this,obj,methodID,args);
  764. va_end(args);
  765. return result;
  766.     }
  767.     jchar CallCharMethodV(jobject obj, jmethodID methodID, 
  768.   va_list args) {
  769.         return functions->CallCharMethodV(this,obj,methodID,args);
  770.     }
  771.     jchar CallCharMethodA(jobject obj, jmethodID methodID, 
  772.   jvalue * args) {
  773.         return functions->CallCharMethodA(this,obj,methodID,args);
  774.     }
  775.     jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {
  776.         va_list args;
  777. jshort result;
  778. va_start(args,methodID);
  779. result = functions->CallShortMethodV(this,obj,methodID,args);
  780. va_end(args);
  781. return result;
  782.     }
  783.     jshort CallShortMethodV(jobject obj, jmethodID methodID, 
  784.     va_list args) {
  785.         return functions->CallShortMethodV(this,obj,methodID,args);
  786.     }
  787.     jshort CallShortMethodA(jobject obj, jmethodID methodID, 
  788.     jvalue * args) {
  789.         return functions->CallShortMethodA(this,obj,methodID,args);
  790.     }
  791.     jint CallIntMethod(jobject obj, jmethodID methodID, ...) {
  792.         va_list args;
  793. jint result;
  794. va_start(args,methodID);
  795. result = functions->CallIntMethodV(this,obj,methodID,args);
  796. va_end(args);
  797. return result;
  798.     }
  799.     jint CallIntMethodV(jobject obj, jmethodID methodID, 
  800. va_list args) {
  801.         return functions->CallIntMethodV(this,obj,methodID,args);
  802.     }
  803.     jint CallIntMethodA(jobject obj, jmethodID methodID, 
  804. jvalue * args) {
  805.         return functions->CallIntMethodA(this,obj,methodID,args);
  806.     }
  807.     jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {
  808.         va_list args;
  809. jlong result;
  810. va_start(args,methodID);
  811. result = functions->CallLongMethodV(this,obj,methodID,args);
  812. va_end(args);
  813. return result;
  814.     }
  815.     jlong CallLongMethodV(jobject obj, jmethodID methodID, 
  816.   va_list args) {
  817.         return functions->CallLongMethodV(this,obj,methodID,args);
  818.     }
  819.     jlong CallLongMethodA(jobject obj, jmethodID methodID, 
  820.   jvalue * args) {
  821.         return functions->CallLongMethodA(this,obj,methodID,args);
  822.     }
  823.     jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {
  824.         va_list args;
  825. jfloat result;
  826. va_start(args,methodID);
  827. result = functions->CallFloatMethodV(this,obj,methodID,args);
  828. va_end(args);
  829. return result;
  830.     }
  831.     jfloat CallFloatMethodV(jobject obj, jmethodID methodID, 
  832.     va_list args) {
  833.         return functions->CallFloatMethodV(this,obj,methodID,args);
  834.     }
  835.     jfloat CallFloatMethodA(jobject obj, jmethodID methodID, 
  836.     jvalue * args) {
  837.         return functions->CallFloatMethodA(this,obj,methodID,args);
  838.     }
  839.     jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {
  840.         va_list args;
  841. jdouble result;
  842. va_start(args,methodID);
  843. result = functions->CallDoubleMethodV(this,obj,methodID,args);
  844. va_end(args);
  845. return result;
  846.     }
  847.     jdouble CallDoubleMethodV(jobject obj, jmethodID methodID, 
  848. va_list args) {
  849.         return functions->CallDoubleMethodV(this,obj,methodID,args);
  850.     }
  851.     jdouble CallDoubleMethodA(jobject obj, jmethodID methodID, 
  852. jvalue * args) {
  853.         return functions->CallDoubleMethodA(this,obj,methodID,args);
  854.     }
  855.     void CallVoidMethod(jobject obj, jmethodID methodID, ...) {
  856.         va_list args;
  857. va_start(args,methodID);
  858. functions->CallVoidMethodV(this,obj,methodID,args);
  859. va_end(args);
  860.     }
  861.     void CallVoidMethodV(jobject obj, jmethodID methodID, 
  862.  va_list args) {
  863.         functions->CallVoidMethodV(this,obj,methodID,args);
  864.     }
  865.     void CallVoidMethodA(jobject obj, jmethodID methodID, 
  866.  jvalue * args) {
  867.         functions->CallVoidMethodA(this,obj,methodID,args);
  868.     }
  869.     jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz, 
  870.        jmethodID methodID, ...) {
  871.         va_list args;
  872. jobject result;
  873. va_start(args,methodID);
  874. result = functions->CallNonvirtualObjectMethodV(this,obj,clazz,
  875. methodID,args);
  876. va_end(args);
  877. return result;
  878.     }
  879.     jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz, 
  880. jmethodID methodID, va_list args) {
  881.         return functions->CallNonvirtualObjectMethodV(this,obj,clazz,
  882.       methodID,args);
  883.     }
  884.     jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz, 
  885. jmethodID methodID, jvalue * args) {
  886.         return functions->CallNonvirtualObjectMethodA(this,obj,clazz,
  887.       methodID,args);
  888.     }
  889.     jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz, 
  890.  jmethodID methodID, ...) {
  891.         va_list args;
  892. jboolean result;
  893. va_start(args,methodID);
  894. result = functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
  895.  methodID,args);
  896. va_end(args);
  897. return result;
  898.     }
  899.     jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz, 
  900.   jmethodID methodID, va_list args) {
  901.         return functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
  902.        methodID,args);
  903.     }
  904.     jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz, 
  905.   jmethodID methodID, jvalue * args) {
  906.         return functions->CallNonvirtualBooleanMethodA(this,obj,clazz,
  907.        methodID, args);
  908.     }
  909.     jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz, 
  910.    jmethodID methodID, ...) {
  911.         va_list args;
  912. jbyte result;
  913. va_start(args,methodID);
  914. result = functions->CallNonvirtualByteMethodV(this,obj,clazz,
  915.       methodID,args);
  916. va_end(args);
  917. return result;
  918.     }
  919.     jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz, 
  920.     jmethodID methodID, va_list args) {
  921.         return functions->CallNonvirtualByteMethodV(this,obj,clazz,
  922.     methodID,args);
  923.     }
  924.     jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz, 
  925.     jmethodID methodID, jvalue * args) {
  926.         return functions->CallNonvirtualByteMethodA(this,obj,clazz,
  927.     methodID,args);
  928.     }
  929.     jchar CallNonvirtualCharMethod(jobject obj, jclass clazz, 
  930.    jmethodID methodID, ...) {
  931.         va_list args;
  932. jchar result;
  933. va_start(args,methodID);
  934. result = functions->CallNonvirtualCharMethodV(this,obj,clazz,
  935.       methodID,args);
  936. va_end(args);
  937. return result;
  938.     }
  939.     jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz, 
  940.     jmethodID methodID, va_list args) {
  941.         return functions->CallNonvirtualCharMethodV(this,obj,clazz,
  942.     methodID,args);
  943.     }
  944.     jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz, 
  945.     jmethodID methodID, jvalue * args) {
  946.         return functions->CallNonvirtualCharMethodA(this,obj,clazz,
  947.     methodID,args);
  948.     }
  949.     jshort CallNonvirtualShortMethod(jobject obj, jclass clazz, 
  950.      jmethodID methodID, ...) {
  951.         va_list args;
  952. jshort result;
  953. va_start(args,methodID);
  954. result = functions->CallNonvirtualShortMethodV(this,obj,clazz,
  955.        methodID,args);
  956. va_end(args);
  957. return result;
  958.     }
  959.     jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz, 
  960.       jmethodID methodID, va_list args) {
  961.         return functions->CallNonvirtualShortMethodV(this,obj,clazz,
  962.      methodID,args);
  963.     }
  964.     jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,
  965.       jmethodID methodID, jvalue * args) {
  966.         return functions->CallNonvirtualShortMethodA(this,obj,clazz,
  967.      methodID,args);
  968.     }
  969.     jint CallNonvirtualIntMethod(jobject obj, jclass clazz, 
  970.  jmethodID methodID, ...) {
  971.         va_list args;
  972. jint result;
  973. va_start(args,methodID);
  974. result = functions->CallNonvirtualIntMethodV(this,obj,clazz,
  975.      methodID,args);
  976. va_end(args);
  977. return result;
  978.     }
  979.     jint CallNonvirtualIntMethodV(jobject obj, jclass clazz, 
  980.   jmethodID methodID, va_list args) {
  981.         return functions->CallNonvirtualIntMethodV(this,obj,clazz,
  982.    methodID,args);
  983.     }
  984.     jint CallNonvirtualIntMethodA(jobject obj, jclass clazz, 
  985.   jmethodID methodID, jvalue * args) {
  986.         return functions->CallNonvirtualIntMethodA(this,obj,clazz,
  987.    methodID,args);
  988.     }
  989.     jlong CallNonvirtualLongMethod(jobject obj, jclass clazz,
  990.    jmethodID methodID, ...) {
  991.         va_list args;
  992. jlong result;
  993. va_start(args,methodID);
  994. result = functions->CallNonvirtualLongMethodV(this,obj,clazz,
  995.       methodID,args);
  996. va_end(args);
  997. return result;
  998.     }
  999.     jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz,
  1000.     jmethodID methodID, va_list args) {
  1001.         return functions->CallNonvirtualLongMethodV(this,obj,clazz,
  1002.     methodID,args);
  1003.     }
  1004.     jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz, 
  1005.     jmethodID methodID, jvalue * args) {
  1006.         return functions->CallNonvirtualLongMethodA(this,obj,clazz,
  1007.     methodID,args);
  1008.     }
  1009.     jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz, 
  1010.      jmethodID methodID, ...) {
  1011.         va_list args;
  1012. jfloat result;
  1013. va_start(args,methodID);
  1014. result = functions->CallNonvirtualFloatMethodV(this,obj,clazz,
  1015.        methodID,args);
  1016. va_end(args);
  1017. return result;
  1018.     }
  1019.     jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz,
  1020.       jmethodID methodID, 
  1021.       va_list args) {
  1022.         return functions->CallNonvirtualFloatMethodV(this,obj,clazz,
  1023.      methodID,args);
  1024.     }
  1025.     jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz, 
  1026.       jmethodID methodID, 
  1027.       jvalue * args) {
  1028.         return functions->CallNonvirtualFloatMethodA(this,obj,clazz,
  1029.      methodID,args);
  1030.     }
  1031.     jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz,
  1032.        jmethodID methodID, ...) {
  1033.         va_list args;
  1034. jdouble result;
  1035. va_start(args,methodID);
  1036. result = functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
  1037. methodID,args);
  1038. va_end(args);
  1039. return result;
  1040.     }
  1041.     jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz,
  1042. jmethodID methodID, 
  1043. va_list args) {
  1044.         return functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
  1045.       methodID,args);
  1046.     }
  1047.     jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz, 
  1048. jmethodID methodID, 
  1049. jvalue * args) {
  1050.         return functions->CallNonvirtualDoubleMethodA(this,obj,clazz,
  1051.       methodID,args);
  1052.     }
  1053.     void CallNonvirtualVoidMethod(jobject obj, jclass clazz,
  1054.   jmethodID methodID, ...) {
  1055.         va_list args;
  1056. va_start(args,methodID);
  1057. functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
  1058. va_end(args);
  1059.     }
  1060.     void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,
  1061.    jmethodID methodID, 
  1062.    va_list args) {
  1063.         functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
  1064.     }
  1065.     void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,
  1066.    jmethodID methodID, 
  1067.    jvalue * args) {
  1068.         functions->CallNonvirtualVoidMethodA(this,obj,clazz,methodID,args);
  1069.     }
  1070.     jfieldID GetFieldID(jclass clazz, const char *name, 
  1071. const char *sig) {
  1072.         return functions->GetFieldID(this,clazz,name,sig);
  1073.     }
  1074.     jobject GetObjectField(jobject obj, jfieldID fieldID) {
  1075.         return functions->GetObjectField(this,obj,fieldID);
  1076.     }
  1077.     jboolean GetBooleanField(jobject obj, jfieldID fieldID) {
  1078.         return functions->GetBooleanField(this,obj,fieldID);
  1079.     }
  1080.     jbyte GetByteField(jobject obj, jfieldID fieldID) {
  1081.         return functions->GetByteField(this,obj,fieldID);
  1082.     }
  1083.     jchar GetCharField(jobject obj, jfieldID fieldID) {
  1084.         return functions->GetCharField(this,obj,fieldID);
  1085.     }
  1086.     jshort GetShortField(jobject obj, jfieldID fieldID) {
  1087.         return functions->GetShortField(this,obj,fieldID);
  1088.     }
  1089.     jint GetIntField(jobject obj, jfieldID fieldID) {
  1090.         return functions->GetIntField(this,obj,fieldID);
  1091.     }
  1092.     jlong GetLongField(jobject obj, jfieldID fieldID) {
  1093.         return functions->GetLongField(this,obj,fieldID);
  1094.     }
  1095.     jfloat GetFloatField(jobject obj, jfieldID fieldID) {
  1096.         return functions->GetFloatField(this,obj,fieldID);
  1097.     }
  1098.     jdouble GetDoubleField(jobject obj, jfieldID fieldID) {
  1099.         return functions->GetDoubleField(this,obj,fieldID);
  1100.     }
  1101.     void SetObjectField(jobject obj, jfieldID fieldID, jobject val) {
  1102.         functions->SetObjectField(this,obj,fieldID,val);
  1103.     }
  1104.     void SetBooleanField(jobject obj, jfieldID fieldID, 
  1105.  jboolean val) {
  1106.         functions->SetBooleanField(this,obj,fieldID,val);
  1107.     }
  1108.     void SetByteField(jobject obj, jfieldID fieldID, 
  1109.       jbyte val) {
  1110.         functions->SetByteField(this,obj,fieldID,val);
  1111.     }
  1112.     void SetCharField(jobject obj, jfieldID fieldID, 
  1113.       jchar val) {
  1114.         functions->SetCharField(this,obj,fieldID,val);
  1115.     }
  1116.     void SetShortField(jobject obj, jfieldID fieldID,
  1117.        jshort val) {
  1118.         functions->SetShortField(this,obj,fieldID,val);
  1119.     }
  1120.     void SetIntField(jobject obj, jfieldID fieldID, 
  1121.      jint val) {
  1122.         functions->SetIntField(this,obj,fieldID,val);
  1123.     }
  1124.     void SetLongField(jobject obj, jfieldID fieldID, 
  1125.       jlong val) {
  1126.         functions->SetLongField(this,obj,fieldID,val);
  1127.     }
  1128.     void SetFloatField(jobject obj, jfieldID fieldID, 
  1129.        jfloat val) {
  1130.         functions->SetFloatField(this,obj,fieldID,val);
  1131.     }
  1132.     void SetDoubleField(jobject obj, jfieldID fieldID, 
  1133. jdouble val) {
  1134.         functions->SetDoubleField(this,obj,fieldID,val);
  1135.     }
  1136.     jmethodID GetStaticMethodID(jclass clazz, const char *name, 
  1137. const char *sig) {
  1138.         return functions->GetStaticMethodID(this,clazz,name,sig);
  1139.     }
  1140.     jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID, 
  1141.      ...) {
  1142.         va_list args;
  1143. jobject result;
  1144. va_start(args,methodID);
  1145. result = functions->CallStaticObjectMethodV(this,clazz,methodID,args);
  1146. va_end(args);
  1147. return result;
  1148.     }
  1149.     jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID, 
  1150.       va_list args) {
  1151.         return functions->CallStaticObjectMethodV(this,clazz,methodID,args);
  1152.     }
  1153.     jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID, 
  1154.       jvalue *args) {
  1155.         return functions->CallStaticObjectMethodA(this,clazz,methodID,args);
  1156.     }
  1157.     jboolean CallStaticBooleanMethod(jclass clazz, 
  1158.      jmethodID methodID, ...) {
  1159.         va_list args;
  1160. jboolean result;
  1161. va_start(args,methodID);
  1162. result = functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
  1163. va_end(args);
  1164. return result;
  1165.     }
  1166.     jboolean CallStaticBooleanMethodV(jclass clazz,
  1167.       jmethodID methodID, va_list args) {
  1168.         return functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
  1169.     }
  1170.     jboolean CallStaticBooleanMethodA(jclass clazz,
  1171.       jmethodID methodID, jvalue *args) {
  1172.         return functions->CallStaticBooleanMethodA(this,clazz,methodID,args);
  1173.     }
  1174.     jbyte CallStaticByteMethod(jclass clazz,
  1175.        jmethodID methodID, ...) {
  1176.         va_list args;
  1177. jbyte result;
  1178. va_start(args,methodID);
  1179. result = functions->CallStaticByteMethodV(this,clazz,methodID,args);
  1180. va_end(args);
  1181. return result;
  1182.     }
  1183.     jbyte CallStaticByteMethodV(jclass clazz,
  1184. jmethodID methodID, va_list args) {
  1185.         return functions->CallStaticByteMethodV(this,clazz,methodID,args);
  1186.     }
  1187.     jbyte CallStaticByteMethodA(jclass clazz, 
  1188. jmethodID methodID, jvalue *args) {
  1189.         return functions->CallStaticByteMethodA(this,clazz,methodID,args);
  1190.     }
  1191.     jchar CallStaticCharMethod(jclass clazz,
  1192.        jmethodID methodID, ...) {
  1193.         va_list args;
  1194. jchar result;
  1195. va_start(args,methodID);
  1196. result = functions->CallStaticCharMethodV(this,clazz,methodID,args);
  1197. va_end(args);
  1198. return result;
  1199.     }
  1200.     jchar CallStaticCharMethodV(jclass clazz,
  1201. jmethodID methodID, va_list args) {
  1202.         return functions->CallStaticCharMethodV(this,clazz,methodID,args);
  1203.     }
  1204.     jchar CallStaticCharMethodA(jclass clazz,
  1205. jmethodID methodID, jvalue *args) {
  1206.         return functions->CallStaticCharMethodA(this,clazz,methodID,args);
  1207.     }
  1208.     jshort CallStaticShortMethod(jclass clazz,
  1209.  jmethodID methodID, ...) {
  1210.         va_list args;
  1211. jshort result;
  1212. va_start(args,methodID);
  1213. result = functions->CallStaticShortMethodV(this,clazz,methodID,args);
  1214. va_end(args);
  1215. return result;
  1216.     }
  1217.     jshort CallStaticShortMethodV(jclass clazz,
  1218.   jmethodID methodID, va_list args) {
  1219.         return functions->CallStaticShortMethodV(this,clazz,methodID,args);
  1220.     }
  1221.     jshort CallStaticShortMethodA(jclass clazz,
  1222.   jmethodID methodID, jvalue *args) {
  1223.         return functions->CallStaticShortMethodA(this,clazz,methodID,args);
  1224.     }
  1225.     jint CallStaticIntMethod(jclass clazz,
  1226.      jmethodID methodID, ...) {
  1227.         va_list args;
  1228. jint result;
  1229. va_start(args,methodID);
  1230. result = functions->CallStaticIntMethodV(this,clazz,methodID,args);
  1231. va_end(args);
  1232. return result;
  1233.     }
  1234.     jint CallStaticIntMethodV(jclass clazz,
  1235.       jmethodID methodID, va_list args) {
  1236.         return functions->CallStaticIntMethodV(this,clazz,methodID,args);
  1237.     }
  1238.     jint CallStaticIntMethodA(jclass clazz, 
  1239.       jmethodID methodID, jvalue *args) {
  1240.         return functions->CallStaticIntMethodA(this,clazz,methodID,args);
  1241.     }
  1242.     jlong CallStaticLongMethod(jclass clazz,
  1243.        jmethodID methodID, ...) {
  1244.         va_list args;
  1245. jlong result;
  1246. va_start(args,methodID);
  1247. result = functions->CallStaticLongMethodV(this,clazz,methodID,args);
  1248. va_end(args);
  1249. return result;
  1250.     }
  1251.     jlong CallStaticLongMethodV(jclass clazz, 
  1252. jmethodID methodID, va_list args) {
  1253.         return functions->CallStaticLongMethodV(this,clazz,methodID,args);
  1254.     }
  1255.     jlong CallStaticLongMethodA(jclass clazz, 
  1256. jmethodID methodID, jvalue *args) {
  1257.         return functions->CallStaticLongMethodA(this,clazz,methodID,args);
  1258.     }
  1259.     jfloat CallStaticFloatMethod(jclass clazz, 
  1260.  jmethodID methodID, ...) {
  1261.         va_list args;
  1262. jfloat result;
  1263. va_start(args,methodID);
  1264. result = functions->CallStaticFloatMethodV(this,clazz,methodID,args);
  1265. va_end(args);
  1266. return result;
  1267.     }
  1268.     jfloat CallStaticFloatMethodV(jclass clazz, 
  1269.   jmethodID methodID, va_list args) {
  1270.         return functions->CallStaticFloatMethodV(this,clazz,methodID,args);
  1271.     }
  1272.     jfloat CallStaticFloatMethodA(jclass clazz, 
  1273.   jmethodID methodID, jvalue *args) {
  1274.         return functions->CallStaticFloatMethodA(this,clazz,methodID,args);
  1275.     }
  1276.     jdouble CallStaticDoubleMethod(jclass clazz, 
  1277.    jmethodID methodID, ...) {
  1278.         va_list args;
  1279. jdouble result;
  1280. va_start(args,methodID);
  1281. result = functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
  1282. va_end(args);
  1283. return result;
  1284.     }
  1285.     jdouble CallStaticDoubleMethodV(jclass clazz, 
  1286.     jmethodID methodID, va_list args) {
  1287.         return functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
  1288.     }
  1289.     jdouble CallStaticDoubleMethodA(jclass clazz, 
  1290.     jmethodID methodID, jvalue *args) {
  1291.         return functions->CallStaticDoubleMethodA(this,clazz,methodID,args);
  1292.     }
  1293.     void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {
  1294.         va_list args;
  1295. va_start(args,methodID);
  1296. functions->CallStaticVoidMethodV(this,cls,methodID,args);
  1297. va_end(args);
  1298.     }
  1299.     void CallStaticVoidMethodV(jclass cls, jmethodID methodID, 
  1300.        va_list args) {
  1301.         functions->CallStaticVoidMethodV(this,cls,methodID,args);
  1302.     }
  1303.     void CallStaticVoidMethodA(jclass cls, jmethodID methodID, 
  1304.        jvalue * args) {
  1305.         functions->CallStaticVoidMethodA(this,cls,methodID,args);
  1306.     }
  1307.     jfieldID GetStaticFieldID(jclass clazz, const char *name, 
  1308.       const char *sig) {
  1309.         return functions->GetStaticFieldID(this,clazz,name,sig);
  1310.     }
  1311.     jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) {
  1312.         return functions->GetStaticObjectField(this,clazz,fieldID);
  1313.     }
  1314.     jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) {
  1315.         return functions->GetStaticBooleanField(this,clazz,fieldID);
  1316.     }
  1317.     jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) {
  1318.         return functions->GetStaticByteField(this,clazz,fieldID);
  1319.     }
  1320.     jchar GetStaticCharField(jclass clazz, jfieldID fieldID) {
  1321.         return functions->GetStaticCharField(this,clazz,fieldID);
  1322.     }
  1323.     jshort GetStaticShortField(jclass clazz, jfieldID fieldID) {
  1324.         return functions->GetStaticShortField(this,clazz,fieldID);
  1325.     }
  1326.     jint GetStaticIntField(jclass clazz, jfieldID fieldID) {
  1327.         return functions->GetStaticIntField(this,clazz,fieldID);
  1328.     }
  1329.     jlong GetStaticLongField(jclass clazz, jfieldID fieldID) {
  1330.         return functions->GetStaticLongField(this,clazz,fieldID);
  1331.     }
  1332.     jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) {
  1333.         return functions->GetStaticFloatField(this,clazz,fieldID);
  1334.     }
  1335.     jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) {
  1336.         return functions->GetStaticDoubleField(this,clazz,fieldID);
  1337.     }
  1338.     void SetStaticObjectField(jclass clazz, jfieldID fieldID,
  1339. jobject value) {
  1340.       functions->SetStaticObjectField(this,clazz,fieldID,value);
  1341.     }
  1342.     void SetStaticBooleanField(jclass clazz, jfieldID fieldID,
  1343. jboolean value) {
  1344.       functions->SetStaticBooleanField(this,clazz,fieldID,value);
  1345.     }
  1346.     void SetStaticByteField(jclass clazz, jfieldID fieldID,
  1347. jbyte value) {
  1348.       functions->SetStaticByteField(this,clazz,fieldID,value);
  1349.     }
  1350.     void SetStaticCharField(jclass clazz, jfieldID fieldID,
  1351. jchar value) {
  1352.       functions->SetStaticCharField(this,clazz,fieldID,value);
  1353.     }
  1354.     void SetStaticShortField(jclass clazz, jfieldID fieldID,
  1355. jshort value) {
  1356.       functions->SetStaticShortField(this,clazz,fieldID,value);
  1357.     }
  1358.     void SetStaticIntField(jclass clazz, jfieldID fieldID,
  1359. jint value) {
  1360.       functions->SetStaticIntField(this,clazz,fieldID,value);
  1361.     }
  1362.     void SetStaticLongField(jclass clazz, jfieldID fieldID,
  1363. jlong value) {
  1364.       functions->SetStaticLongField(this,clazz,fieldID,value);
  1365.     }
  1366.     void SetStaticFloatField(jclass clazz, jfieldID fieldID,
  1367. jfloat value) {
  1368.       functions->SetStaticFloatField(this,clazz,fieldID,value);
  1369.     }
  1370.     void SetStaticDoubleField(jclass clazz, jfieldID fieldID,
  1371. jdouble value) {
  1372.       functions->SetStaticDoubleField(this,clazz,fieldID,value);
  1373.     }
  1374.     jstring NewString(const jchar *unicode, jsize len) {
  1375.         return functions->NewString(this,unicode,len);
  1376.     }
  1377.     jsize GetStringLength(jstring str) {
  1378.         return functions->GetStringLength(this,str);
  1379.     }
  1380.     const jchar *GetStringChars(jstring str, jboolean *isCopy) {
  1381.         return functions->GetStringChars(this,str,isCopy);
  1382.     }
  1383.     void ReleaseStringChars(jstring str, const jchar *chars) {
  1384.         functions->ReleaseStringChars(this,str,chars);
  1385.     }
  1386.   
  1387.     jstring NewStringUTF(const char *utf) {
  1388.         return functions->NewStringUTF(this,utf);
  1389.     }
  1390.     jsize GetStringUTFLength(jstring str) {
  1391.         return functions->GetStringUTFLength(this,str);
  1392.     }
  1393.     const char* GetStringUTFChars(jstring str, jboolean *isCopy) {
  1394.         return functions->GetStringUTFChars(this,str,isCopy);
  1395.     }
  1396.     void ReleaseStringUTFChars(jstring str, const char* chars) {
  1397.         functions->ReleaseStringUTFChars(this,str,chars);
  1398.     }
  1399.     jsize GetArrayLength(jarray array) {
  1400.         return functions->GetArrayLength(this,array);
  1401.     }
  1402.     jobjectArray NewObjectArray(jsize len, jclass clazz, 
  1403. jobject init) {
  1404.         return functions->NewObjectArray(this,len,clazz,init);
  1405.     }
  1406.     jobject GetObjectArrayElement(jobjectArray array, jsize index) {
  1407.         return functions->GetObjectArrayElement(this,array,index);
  1408.     }
  1409.     void SetObjectArrayElement(jobjectArray array, jsize index, 
  1410.        jobject val) {
  1411.         functions->SetObjectArrayElement(this,array,index,val);
  1412.     }
  1413.     jbooleanArray NewBooleanArray(jsize len) {
  1414.         return functions->NewBooleanArray(this,len);
  1415.     }
  1416.     jbyteArray NewByteArray(jsize len) {
  1417.         return functions->NewByteArray(this,len);
  1418.     }
  1419.     jcharArray NewCharArray(jsize len) {
  1420.         return functions->NewCharArray(this,len);
  1421.     }
  1422.     jshortArray NewShortArray(jsize len) {
  1423.         return functions->NewShortArray(this,len);
  1424.     }
  1425.     jintArray NewIntArray(jsize len) {
  1426.         return functions->NewIntArray(this,len);
  1427.     }
  1428.     jlongArray NewLongArray(jsize len) {
  1429.         return functions->NewLongArray(this,len);
  1430.     }
  1431.     jfloatArray NewFloatArray(jsize len) {
  1432.         return functions->NewFloatArray(this,len);
  1433.     }
  1434.     jdoubleArray NewDoubleArray(jsize len) {
  1435.         return functions->NewDoubleArray(this,len);
  1436.     }
  1437.     jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) {
  1438.         return functions->GetBooleanArrayElements(this,array,isCopy);
  1439.     }
  1440.     jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) {
  1441.         return functions->GetByteArrayElements(this,array,isCopy);
  1442.     }
  1443.     jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) {
  1444.         return functions->GetCharArrayElements(this,array,isCopy);
  1445.     }
  1446.     jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) {
  1447.         return functions->GetShortArrayElements(this,array,isCopy);
  1448.     }
  1449.     jint * GetIntArrayElements(jintArray array, jboolean *isCopy) {
  1450.         return functions->GetIntArrayElements(this,array,isCopy);
  1451.     }
  1452.     jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) {
  1453.         return functions->GetLongArrayElements(this,array,isCopy);
  1454.     }
  1455.     jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) {
  1456.         return functions->GetFloatArrayElements(this,array,isCopy);
  1457.     }
  1458.     jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) {
  1459.         return functions->GetDoubleArrayElements(this,array,isCopy);
  1460.     }
  1461.     void ReleaseBooleanArrayElements(jbooleanArray array, 
  1462.      jboolean *elems,
  1463.      jint mode) {
  1464.         functions->ReleaseBooleanArrayElements(this,array,elems,mode);
  1465.     }
  1466.     void ReleaseByteArrayElements(jbyteArray array, 
  1467.   jbyte *elems,
  1468.   jint mode) {
  1469.         functions->ReleaseByteArrayElements(this,array,elems,mode);
  1470.     }
  1471.     void ReleaseCharArrayElements(jcharArray array, 
  1472.   jchar *elems,
  1473.   jint mode) {
  1474.         functions->ReleaseCharArrayElements(this,array,elems,mode);
  1475.     }
  1476.     void ReleaseShortArrayElements(jshortArray array, 
  1477.    jshort *elems,
  1478.    jint mode) {
  1479.         functions->ReleaseShortArrayElements(this,array,elems,mode);
  1480.     }
  1481.     void ReleaseIntArrayElements(jintArray array, 
  1482.  jint *elems,
  1483.  jint mode) {
  1484.         functions->ReleaseIntArrayElements(this,array,elems,mode);
  1485.     }
  1486.     void ReleaseLongArrayElements(jlongArray array, 
  1487.   jlong *elems,
  1488.   jint mode) {
  1489.         functions->ReleaseLongArrayElements(this,array,elems,mode);
  1490.     }
  1491.     void ReleaseFloatArrayElements(jfloatArray array, 
  1492.    jfloat *elems,
  1493.    jint mode) {
  1494.         functions->ReleaseFloatArrayElements(this,array,elems,mode);
  1495.     }
  1496.     void ReleaseDoubleArrayElements(jdoubleArray array, 
  1497.     jdouble *elems,
  1498.     jint mode) {
  1499.         functions->ReleaseDoubleArrayElements(this,array,elems,mode);
  1500.     }
  1501.     void GetBooleanArrayRegion(jbooleanArray array, 
  1502.        jsize start, jsize len, jboolean *buf) {
  1503.         functions->GetBooleanArrayRegion(this,array,start,len,buf);
  1504.     }
  1505.     void GetByteArrayRegion(jbyteArray array, 
  1506.     jsize start, jsize len, jbyte *buf) {
  1507.         functions->GetByteArrayRegion(this,array,start,len,buf);
  1508.     }
  1509.     void GetCharArrayRegion(jcharArray array, 
  1510.     jsize start, jsize len, jchar *buf) {
  1511.         functions->GetCharArrayRegion(this,array,start,len,buf);
  1512.     }
  1513.     void GetShortArrayRegion(jshortArray array, 
  1514.      jsize start, jsize len, jshort *buf) {
  1515.         functions->GetShortArrayRegion(this,array,start,len,buf);
  1516.     }
  1517.     void GetIntArrayRegion(jintArray array, 
  1518.    jsize start, jsize len, jint *buf) {
  1519.         functions->GetIntArrayRegion(this,array,start,len,buf);
  1520.     }
  1521.     void GetLongArrayRegion(jlongArray array, 
  1522.     jsize start, jsize len, jlong *buf) {
  1523.         functions->GetLongArrayRegion(this,array,start,len,buf);
  1524.     }
  1525.     void GetFloatArrayRegion(jfloatArray array, 
  1526.      jsize start, jsize len, jfloat *buf) {
  1527.         functions->GetFloatArrayRegion(this,array,start,len,buf);
  1528.     }
  1529.     void GetDoubleArrayRegion(jdoubleArray array, 
  1530.       jsize start, jsize len, jdouble *buf) {
  1531.         functions->GetDoubleArrayRegion(this,array,start,len,buf);
  1532.     }
  1533.     void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len, 
  1534.        jboolean *buf) {
  1535.         functions->SetBooleanArrayRegion(this,array,start,len,buf);
  1536.     }
  1537.     void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,
  1538.     jbyte *buf) {
  1539.         functions->SetByteArrayRegion(this,array,start,len,buf);
  1540.     }
  1541.     void SetCharArrayRegion(jcharArray array, jsize start, jsize len, 
  1542.     jchar *buf) {
  1543.         functions->SetCharArrayRegion(this,array,start,len,buf);
  1544.     }
  1545.     void SetShortArrayRegion(jshortArray array, jsize start, jsize len, 
  1546.      jshort *buf) {
  1547.         functions->SetShortArrayRegion(this,array,start,len,buf);
  1548.     }
  1549.     void SetIntArrayRegion(jintArray array, jsize start, jsize len,
  1550.    jint *buf) {
  1551.         functions->SetIntArrayRegion(this,array,start,len,buf);
  1552.     }
  1553.     void SetLongArrayRegion(jlongArray array, jsize start, jsize len,
  1554.     jlong *buf) {
  1555.         functions->SetLongArrayRegion(this,array,start,len,buf);
  1556.     }
  1557.     void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len, 
  1558.      jfloat *buf) {
  1559.         functions->SetFloatArrayRegion(this,array,start,len,buf);
  1560.     }
  1561.     void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
  1562.       jdouble *buf) {
  1563.         functions->SetDoubleArrayRegion(this,array,start,len,buf);
  1564.     }
  1565.     jint RegisterNatives(jclass clazz, const JNINativeMethod *methods,
  1566.  jint nMethods) {
  1567.         return functions->RegisterNatives(this,clazz,methods,nMethods);
  1568.     }
  1569.     jint UnregisterNatives(jclass clazz) {
  1570.         return functions->UnregisterNatives(this,clazz);
  1571.     }  
  1572.    
  1573.     jint MonitorEnter(jobject obj) {
  1574.         return functions->MonitorEnter(this,obj);
  1575.     }
  1576.     jint MonitorExit(jobject obj) {
  1577.         return functions->MonitorExit(this,obj);
  1578.     }
  1579.     jint GetJavaVM(JavaVM **vm) {
  1580.         return functions->GetJavaVM(this,vm);
  1581.     }
  1582.   
  1583. #endif /* __cplusplus */
  1584. };
  1585. /* These structures will be VM-specific. */
  1586. typedef struct JDK1_1InitArgs {
  1587.     jint version;
  1588.     char **properties;
  1589.     jint checkSource; 
  1590.     jint nativeStackSize;
  1591.     jint javaStackSize;
  1592.     jint minHeapSize;
  1593.     jint maxHeapSize;
  1594.     jint verifyMode;
  1595.     char *classpath;
  1596.     jint (JNICALL *vfprintf)(FILE *fp, const char *format, va_list args);
  1597.     void (JNICALL *exit)(jint code);
  1598.     void (JNICALL *abort)();
  1599.     
  1600.     jint enableClassGC;
  1601.     jint enableVerboseGC;
  1602.     jint disableAsyncGC;
  1603.     jint verbose;
  1604.     jboolean debugging;
  1605.     jint debugPort;
  1606. } JDK1_1InitArgs;
  1607. typedef struct JDK1_1AttachArgs {
  1608.     void * __padding; /* C compilers don't allow empty structures. */
  1609. } JDK1_1AttachArgs;
  1610. /* End VM-specific. */
  1611. struct JNIInvokeInterface_ {
  1612.     void *reserved0;
  1613.     void *reserved1;
  1614.     void *reserved2;
  1615.     jint (JNICALL *DestroyJavaVM)(JavaVM *vm);
  1616.     jint (JNICALL *AttachCurrentThread)
  1617.       (JavaVM *vm, JNIEnv **penv, void *args);
  1618.     jint (JNICALL *DetachCurrentThread)(JavaVM *vm);
  1619. };
  1620. struct JavaVM_ {
  1621.     const struct JNIInvokeInterface_ *functions;
  1622.     void *reserved0;
  1623.     void *reserved1;
  1624.     void *reserved2;
  1625. #ifdef __cplusplus
  1626.     jint DestroyJavaVM() {
  1627.         return functions->DestroyJavaVM(this);
  1628.     }
  1629.     jint AttachCurrentThread(JNIEnv **penv, void *args) {
  1630.         return functions->AttachCurrentThread(this, penv, args);
  1631.     }
  1632.     jint DetachCurrentThread() {
  1633.         return functions->DetachCurrentThread(this);
  1634.     }
  1635. #endif
  1636. };
  1637. JNI_PUBLIC_API(void) JNI_GetDefaultJavaVMInitArgs(void *);
  1638. JNI_PUBLIC_API(jint) JNI_CreateJavaVM(JavaVM **, JNIEnv **, void *);
  1639. JNI_PUBLIC_API(jint) JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);
  1640. JNI_PUBLIC_API(jref) JNI_MakeLocalRef(JNIEnv *pJNIEnv, void *pHObject);
  1641. #ifdef __cplusplus
  1642. } /* extern "C" */
  1643. #endif /* __cplusplus */
  1644. #endif /* JNI_H */