您的位置:首页 > 移动开发 > Android开发

Android jni 入门之 (java类-》.h-》.c/c++)一条龙对应

2016-12-01 09:39 302 查看
jni类方法桥接定义1.jni方法定义很简单,难的是你会不会c/c++程序编程基础,此处不涉及c/c++高级逻辑,只列表jni方法定义。一个java类,java类.h文件,.c文件。(1)java类:
package com.youyaxianzi.p.gmethodc;

import com.youyaxianzi.m.javabean.UserBean;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* Created by IMissYou on 2016/11/30.
*/
public class NdkJniTest {
static {
System.loadLibrary("YouYa");
}
public native String getStringText();

public native String setStringText(String str);
public native int getIntText(int i);
public native long getLongText(long l);
public native float getFloatText(float f);
public native double getDoubleText(double d);
public native char getCharText(char c);
public native UserBean getUserBeanClass(UserBean userBean);

public native void getXXOOText(int i,long l,float f,double d,char c,UserBean userBean,String[] strings,int[] ints,float[] floats,long[] longs,
double[] doublesxx,char[] chars,Map<String,String> map,HashMap<String,String> hashMap,List<String> list,ArrayList<String> arrayList,
Map<String,UserBean> mapxx,HashMap<String,UserBean> hashMapxx, List<UserBean> listxx,ArrayList<UserBean> arrayListxx);

public native String[] getStringNum();
public native int[] getIntNum();
public native float[] getFloatNum();
public native long[] getLongNum();
public native double[] getDoubleNum();
public native char[] getCharNum();

public native String[] getStringNum(String[] strings);
public native int[] getIntNum(int[] ints);
public native float[] getFloatNum(float[] floats);
public native long[] getLongNum(long[] longs);
public native double[] getDoubleNum(double[] doubles);
public native char[] getCharNum(char[] chars);

public native Map<String,String> getMapString();
public native HashMap<String,String> getHashMapString();
public native List<String> getListString();
public native ArrayList<String> getArrayListString();

public native Map<String,String> getMapStringNum(Map<String,String> map);
public native HashMap<String,String> getHashMapStringNum( HashMap<String,String> hashMap);
public native List<String> getListStringNum(List<String> list);
public native ArrayList<String> getArrayListStringNum(ArrayList<String> arrayList);

public native Map<String,UserBean> getMapStringClass(Map<String,UserBean> map);
public native HashMap<String,UserBean> getHashMapStringNumClass( HashMap<String,UserBean> hashMap);
public native List<UserBean> getListStringNumClass(List<UserBean> list);
public native ArrayList<UserBean> getArrayListStringNumClass(ArrayList<UserBean> arrayList);
}
(2).对应的.h文件:
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class com_youyaxianzi_p_gmethodc_NdkJniTest */#ifndef _Included_com_youyaxianzi_p_gmethodc_NdkJniTest#define _Included_com_youyaxianzi_p_gmethodc_NdkJniTest#ifdef __cplusplusextern "C" {#endif/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getStringText* Signature: ()Ljava/lang/String;*/JNIEXPORT jstring JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getStringText(JNIEnv *, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    setStringText* Signature: (Ljava/lang/String;)Ljava/lang/String;*/JNIEXPORT jstring JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_setStringText(JNIEnv *, jobject, jstring);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getIntText* Signature: (I)I*/JNIEXPORT jint JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getIntText(JNIEnv *, jobject, jint);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getLongText* Signature: (J)J*/JNIEXPORT jlong JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getLongText(JNIEnv *, jobject, jlong);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getFloatText* Signature: (F)F*/JNIEXPORT jfloat JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getFloatText(JNIEnv *, jobject, jfloat);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getDoubleText* Signature: (D)D*/JNIEXPORT jdouble JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getDoubleText(JNIEnv *, jobject, jdouble);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getCharText* Signature: (C)C*/JNIEXPORT jchar JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getCharText(JNIEnv *, jobject, jchar);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getUserBeanClass* Signature: (Lcom/youyaxianzi/m/javabean/UserBean;)Lcom/youyaxianzi/m/javabean/UserBean;*/JNIEXPORT jobject JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getUserBeanClass(JNIEnv *, jobject, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getXXOOText* Signature: (IJFDCLcom/youyaxianzi/m/javabean/UserBean;[Ljava/lang/String;[I[F[J[D[CLjava/util/Map;Ljava/util/HashMap;Ljava/util/List;Ljava/util/ArrayList;Ljava/util/Map;Ljava/util/HashMap;Ljava/util/List;Ljava/util/ArrayList;)V*/JNIEXPORT void JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getXXOOText(JNIEnv *, jobject, jint, jlong, jfloat, jdouble, jchar, jobject, jobjectArray, jintArray, jfloatArray, jlongArray, jdoubleArray, jcharArray, jobject, jobject, jobject, jobject, jobject, jobject, jobject, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getStringNum* Signature: ()[Ljava/lang/String;*/JNIEXPORT jobjectArray JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getStringNum__(JNIEnv *, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getIntNum* Signature: ()[I*/JNIEXPORT jintArray JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getIntNum__(JNIEnv *, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getFloatNum* Signature: ()[F*/JNIEXPORT jfloatArray JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getFloatNum__(JNIEnv *, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getLongNum* Signature: ()[J*/JNIEXPORT jlongArray JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getLongNum__(JNIEnv *, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getDoubleNum* Signature: ()[D*/JNIEXPORT jdoubleArray JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getDoubleNum__(JNIEnv *, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getCharNum* Signature: ()[C*/JNIEXPORT jcharArray JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getCharNum__(JNIEnv *, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getStringNum* Signature: ([Ljava/lang/String;)[Ljava/lang/String;*/JNIEXPORT jobjectArray JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getStringNum___3Ljava_lang_String_2(JNIEnv *, jobject, jobjectArray);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getIntNum* Signature: ([I)[I*/JNIEXPORT jintArray JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getIntNum___3I(JNIEnv *, jobject, jintArray);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getFloatNum* Signature: ([F)[F*/JNIEXPORT jfloatArray JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getFloatNum___3F(JNIEnv *, jobject, jfloatArray);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getLongNum* Signature: ([J)[J*/JNIEXPORT jlongArray JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getLongNum___3J(JNIEnv *, jobject, jlongArray);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getDoubleNum* Signature: ([D)[D*/JNIEXPORT jdoubleArray JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getDoubleNum___3D(JNIEnv *, jobject, jdoubleArray);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getCharNum* Signature: ([C)[C*/JNIEXPORT jcharArray JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getCharNum___3C(JNIEnv *, jobject, jcharArray);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getMapString* Signature: ()Ljava/util/Map;*/JNIEXPORT jobject JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getMapString(JNIEnv *, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getHashMapString* Signature: ()Ljava/util/HashMap;*/JNIEXPORT jobject JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getHashMapString(JNIEnv *, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getListString* Signature: ()Ljava/util/List;*/JNIEXPORT jobject JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getListString(JNIEnv *, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getArrayListString* Signature: ()Ljava/util/ArrayList;*/JNIEXPORT jobject JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getArrayListString(JNIEnv *, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getMapStringNum* Signature: (Ljava/util/Map;)Ljava/util/Map;*/JNIEXPORT jobject JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getMapStringNum(JNIEnv *, jobject, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getHashMapStringNum* Signature: (Ljava/util/HashMap;)Ljava/util/HashMap;*/JNIEXPORT jobject JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getHashMapStringNum(JNIEnv *, jobject, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getListStringNum* Signature: (Ljava/util/List;)Ljava/util/List;*/JNIEXPORT jobject JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getListStringNum(JNIEnv *, jobject, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getArrayListStringNum* Signature: (Ljava/util/ArrayList;)Ljava/util/ArrayList;*/JNIEXPORT jobject JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getArrayListStringNum(JNIEnv *, jobject, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getMapStringClass* Signature: (Ljava/util/Map;)Ljava/util/Map;*/JNIEXPORT jobject JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getMapStringClass(JNIEnv *, jobject, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getHashMapStringNumClass* Signature: (Ljava/util/HashMap;)Ljava/util/HashMap;*/JNIEXPORT jobject JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getHashMapStringNumClass(JNIEnv *, jobject, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getListStringNumClass* Signature: (Ljava/util/List;)Ljava/util/List;*/JNIEXPORT jobject JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getListStringNumClass(JNIEnv *, jobject, jobject);/** Class:     com_youyaxianzi_p_gmethodc_NdkJniTest* Method:    getArrayListStringNumClass* Signature: (Ljava/util/ArrayList;)Ljava/util/ArrayList;*/JNIEXPORT jobject JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getArrayListStringNumClass(JNIEnv *, jobject, jobject);#ifdef __cplusplus}#endif#endif
(3)..c文件;这里只是列举一两个方法实现,第二个方法没测,有错误请参考第四点:
//// Created by IMissYou on 2016/12/1.//#include "com_youyaxianzi_p_gmethodc_NdkJniTest.h"#define LOG_TAG "NdkJniTest"#undef LOGJNIEXPORT jstring JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_getStringText(JNIEnv *env, jobject obj){return (*env)->NewStringUTF(env,(char*)"米娜,干巴爹");}JNIEXPORT jstring JNICALL Java_com_youyaxianzi_p_gmethodc_NdkJniTest_setStringText(JNIEnv *env, jobject obj, jstring str){return (*env)->NewStringUTF(str);}
(4).  jni.h文件:
/** @(#)jni.h1.28 97/05/19** Copyright (c) 1993-1996 Sun Microsystems, Inc. All Rights Reserved.** Permission to use, copy, modify, and distribute this software* and its documentation for NON-COMMERCIAL purposes and without* fee is hereby granted provided that this copyright notice* appears in all copies.** The Java source code is the confidential and proprietary information* of Sun Microsystems, Inc. ("Confidential Information").  You shall* not disclose such Confidential Information and shall use it only in* accordance with the terms of the license agreement you entered into* with Sun.** SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF* THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A* PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR* ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR* DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.*//** We used part of Netscape's Java Runtime Interface (JRI) as the starting* point of our design and implementation.*//******************************************************************************* Java Runtime Interface* Copyright (c) 1996 Netscape Communications Corporation. All rights reserved.*****************************************************************************/#ifndef JNI_H#define JNI_H#include <stdio.h>#include <stdarg.h>/* jni_md.h contains the machine-dependent typedefs for jbyte, jintand jlong */#include "jni_md.h"#ifdef __cplusplusextern "C" {#endif/** JNI Types*/typedef unsigned charjboolean;typedef unsigned shortjchar;typedef shortjshort;typedef floatjfloat;typedef doublejdouble;typedef jint            jsize;#ifdef __cplusplusclass _jobject {};class _jclass : public _jobject {};class _jthrowable : public _jobject {};class _jstring : public _jobject {};class _jarray : public _jobject {};class _jbooleanArray : public _jarray {};class _jbyteArray : public _jarray {};class _jcharArray : public _jarray {};class _jshortArray : public _jarray {};class _jintArray : public _jarray {};class _jlongArray : public _jarray {};class _jfloatArray : public _jarray {};class _jdoubleArray : public _jarray {};class _jobjectArray : public _jarray {};typedef _jobject *jobject;typedef _jclass *jclass;typedef _jthrowable *jthrowable;typedef _jstring *jstring;typedef _jarray *jarray;typedef _jbooleanArray *jbooleanArray;typedef _jbyteArray *jbyteArray;typedef _jcharArray *jcharArray;typedef _jshortArray *jshortArray;typedef _jintArray *jintArray;typedef _jlongArray *jlongArray;typedef _jfloatArray *jfloatArray;typedef _jdoubleArray *jdoubleArray;typedef _jobjectArray *jobjectArray;#elsestruct _jobject;typedef struct _jobject *jobject;typedef jobject jclass;typedef jobject jthrowable;typedef jobject jstring;typedef jobject jarray;typedef jarray jbooleanArray;typedef jarray jbyteArray;typedef jarray jcharArray;typedef jarray jshortArray;typedef jarray jintArray;typedef jarray jlongArray;typedef jarray jfloatArray;typedef jarray jdoubleArray;typedef jarray jobjectArray;#endiftypedef jobject jref; /* For transition---not meant to be part of publicAPI anymore.*/typedef union jvalue {jboolean z;jbyte    b;jchar    c;jshort   s;jint     i;jlong    j;jfloat   f;jdouble  d;jobject  l;} jvalue;struct _jfieldID;typedef struct _jfieldID *jfieldID;struct _jmethodID;typedef struct _jmethodID *jmethodID;/** jboolean constants*/#define JNI_FALSE 0#define JNI_TRUE 1/** possible return values for JNI functions.*/#define JNI_OK 0#define JNI_ERR (-1)/** used in ReleaseScalarArrayElements*/#define JNI_COMMIT 1#define JNI_ABORT 2/** used in RegisterNatives to describe native method name, signature,* and function pointer.*/typedef struct {char *name;char *signature;void *fnPtr;} JNINativeMethod;/** JNI Native Method Interface.*/struct JNINativeInterface_;struct JNIEnv_;#ifdef __cplusplustypedef JNIEnv_ JNIEnv;#elsetypedef const struct JNINativeInterface_ *JNIEnv;#endif/** JNI Invocation Interface.*/struct JNIInvokeInterface_;struct JavaVM_;#ifdef __cplusplustypedef JavaVM_ JavaVM;#elsetypedef const struct JNIInvokeInterface_ *JavaVM;#endifstruct JNINativeInterface_ {void *reserved0;void *reserved1;void *reserved2;void *reserved3;jint (JNICALL *GetVersion)(JNIEnv *env);jclass (JNICALL *DefineClass)(JNIEnv *env, const char *name, jobject loader, const jbyte *buf,jsize len);jclass (JNICALL *FindClass)(JNIEnv *env, const char *name);void *reserved4;void *reserved5;void *reserved6;jclass (JNICALL *GetSuperclass)(JNIEnv *env, jclass sub);jboolean (JNICALL *IsAssignableFrom)(JNIEnv *env, jclass sub, jclass sup);void *reserved7;jint (JNICALL *Throw)(JNIEnv *env, jthrowable obj);jint (JNICALL *ThrowNew)(JNIEnv *env, jclass clazz, const char *msg);jthrowable (JNICALL *ExceptionOccurred)(JNIEnv *env);void (JNICALL *ExceptionDescribe)(JNIEnv *env);void (JNICALL *ExceptionClear)(JNIEnv *env);void (JNICALL *FatalError)(JNIEnv *env, const char *msg);void *reserved8;void *reserved9;jobject (JNICALL *NewGlobalRef)(JNIEnv *env, jobject lobj);void (JNICALL *DeleteGlobalRef)(JNIEnv *env, jobject gref);void (JNICALL *DeleteLocalRef)(JNIEnv *env, jobject obj);jboolean (JNICALL *IsSameObject)(JNIEnv *env, jobject obj1, jobject obj2);void *reserved10;void *reserved11;jobject (JNICALL *AllocObject)(JNIEnv *env, jclass clazz);jobject (JNICALL *NewObject)(JNIEnv *env, jclass clazz, jmethodID methodID, ...);jobject (JNICALL *NewObjectV)(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);jobject (JNICALL *NewObjectA)(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);jclass (JNICALL *GetObjectClass)(JNIEnv *env, jobject obj);jboolean (JNICALL *IsInstanceOf)(JNIEnv *env, jobject obj, jclass clazz);jmethodID (JNICALL *GetMethodID)(JNIEnv *env, jclass clazz, const char *name, const char *sig);jobject (JNICALL *CallObjectMethod)(JNIEnv *env, jobject obj, jmethodID methodID, ...);jobject (JNICALL *CallObjectMethodV)(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);jobject (JNICALL *CallObjectMethodA)(JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);jboolean (JNICALL *CallBooleanMethod)(JNIEnv *env, jobject obj, jmethodID methodID, ...);jboolean (JNICALL *CallBooleanMethodV)(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);jboolean (JNICALL *CallBooleanMethodA)(JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);jbyte (JNICALL *CallByteMethod)(JNIEnv *env, jobject obj, jmethodID methodID, ...);jbyte (JNICALL *CallByteMethodV)(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);jbyte (JNICALL *CallByteMethodA)(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);jchar (JNICALL *CallCharMethod)(JNIEnv *env, jobject obj, jmethodID methodID, ...);jchar (JNICALL *CallCharMethodV)(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);jchar (JNICALL *CallCharMethodA)(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);jshort (JNICALL *CallShortMethod)(JNIEnv *env, jobject obj, jmethodID methodID, ...);jshort (JNICALL *CallShortMethodV)(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);jshort (JNICALL *CallShortMethodA)(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);jint (JNICALL *CallIntMethod)(JNIEnv *env, jobject obj, jmethodID methodID, ...);jint (JNICALL *CallIntMethodV)(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);jint (JNICALL *CallIntMethodA)(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);jlong (JNICALL *CallLongMethod)(JNIEnv *env, jobject obj, jmethodID methodID, ...);jlong (JNICALL *CallLongMethodV)(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);jlong (JNICALL *CallLongMethodA)(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);jfloat (JNICALL *CallFloatMethod)(JNIEnv *env, jobject obj, jmethodID methodID, ...);jfloat (JNICALL *CallFloatMethodV)(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);jfloat (JNICALL *CallFloatMethodA)(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);jdouble (JNICALL *CallDoubleMethod)(JNIEnv *env, jobject obj, jmethodID methodID, ...);jdouble (JNICALL *CallDoubleMethodV)(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);jdouble (JNICALL *CallDoubleMethodA)(JNIEnv *env, jobject obj, jmethodID methodID, jvalue *args);void (JNICALL *CallVoidMethod)(JNIEnv *env, jobject obj, jmethodID methodID, ...);void (JNICALL *CallVoidMethodV)(JNIEnv *env, jobject obj, jmethodID methodID, va_list args);void (JNICALL *CallVoidMethodA)(JNIEnv *env, jobject obj, jmethodID methodID, jvalue * args);jobject (JNICALL *CallNonvirtualObjectMethod)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);jobject (JNICALL *CallNonvirtualObjectMethodV)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,va_list args);jobject (JNICALL *CallNonvirtualObjectMethodA)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,jvalue * args);jboolean (JNICALL *CallNonvirtualBooleanMethod)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);jboolean (JNICALL *CallNonvirtualBooleanMethodV)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,va_list args);jboolean (JNICALL *CallNonvirtualBooleanMethodA)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,jvalue * args);jbyte (JNICALL *CallNonvirtualByteMethod)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);jbyte (JNICALL *CallNonvirtualByteMethodV)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,va_list args);jbyte (JNICALL *CallNonvirtualByteMethodA)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,jvalue *args);jchar (JNICALL *CallNonvirtualCharMethod)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);jchar (JNICALL *CallNonvirtualCharMethodV)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,va_list args);jchar (JNICALL *CallNonvirtualCharMethodA)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,jvalue *args);jshort (JNICALL *CallNonvirtualShortMethod)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);jshort (JNICALL *CallNonvirtualShortMethodV)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,va_list args);jshort (JNICALL *CallNonvirtualShortMethodA)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,jvalue *args);jint (JNICALL *CallNonvirtualIntMethod)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);jint (JNICALL *CallNonvirtualIntMethodV)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,va_list args);jint (JNICALL *CallNonvirtualIntMethodA)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,jvalue *args);jlong (JNICALL *CallNonvirtualLongMethod)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);jlong (JNICALL *CallNonvirtualLongMethodV)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,va_list args);jlong (JNICALL *CallNonvirtualLongMethodA)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,jvalue *args);jfloat (JNICALL *CallNonvirtualFloatMethod)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);jfloat (JNICALL *CallNonvirtualFloatMethodV)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,va_list args);jfloat (JNICALL *CallNonvirtualFloatMethodA)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,jvalue *args);jdouble (JNICALL *CallNonvirtualDoubleMethod)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);jdouble (JNICALL *CallNonvirtualDoubleMethodV)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,va_list args);jdouble (JNICALL *CallNonvirtualDoubleMethodA)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,jvalue *args);void (JNICALL *CallNonvirtualVoidMethod)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);void (JNICALL *CallNonvirtualVoidMethodV)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,va_list args);void (JNICALL *CallNonvirtualVoidMethodA)(JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,jvalue * args);jfieldID (JNICALL *GetFieldID)(JNIEnv *env, jclass clazz, const char *name, const char *sig);jobject (JNICALL *GetObjectField)(JNIEnv *env, jobject obj, jfieldID fieldID);jboolean (JNICALL *GetBooleanField)(JNIEnv *env, jobject obj, jfieldID fieldID);jbyte (JNICALL *GetByteField)(JNIEnv *env, jobject obj, jfieldID fieldID);jchar (JNICALL *GetCharField)(JNIEnv *env, jobject obj, jfieldID fieldID);jshort (JNICALL *GetShortField)(JNIEnv *env, jobject obj, jfieldID fieldID);jint (JNICALL *GetIntField)(JNIEnv *env, jobject obj, jfieldID fieldID);jlong (JNICALL *GetLongField)(JNIEnv *env, jobject obj, jfieldID fieldID);jfloat (JNICALL *GetFloatField)(JNIEnv *env, jobject obj, jfieldID fieldID);jdouble (JNICALL *GetDoubleField)(JNIEnv *env, jobject obj, jfieldID fieldID);void (JNICALL *SetObjectField)(JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);void (JNICALL *SetBooleanField)(JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);void (JNICALL *SetByteField)(JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);void (JNICALL *SetCharField)(JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);void (JNICALL *SetShortField)(JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);void (JNICALL *SetIntField)(JNIEnv *env, jobject obj, jfieldID fieldID, jint val);void (JNICALL *SetLongField)(JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);void (JNICALL *SetFloatField)(JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);void (JNICALL *SetDoubleField)(JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);jmethodID (JNICALL *GetStaticMethodID)(JNIEnv *env, jclass clazz, const char *name, const char *sig);jobject (JNICALL *CallStaticObjectMethod)(JNIEnv *env, jclass clazz, jmethodID methodID, ...);jobject (JNICALL *CallStaticObjectMethodV)(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);jobject (JNICALL *CallStaticObjectMethodA)(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);jboolean (JNICALL *CallStaticBooleanMethod)(JNIEnv *env, jclass clazz, jmethodID methodID, ...);jboolean (JNICALL *CallStaticBooleanMethodV)(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);jboolean (JNICALL *CallStaticBooleanMethodA)(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);jbyte (JNICALL *CallStaticByteMethod)(JNIEnv *env, jclass clazz, jmethodID methodID, ...);jbyte (JNICALL *CallStaticByteMethodV)(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);jbyte (JNICALL *CallStaticByteMethodA)(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);jchar (JNICALL *CallStaticCharMethod)(JNIEnv *env, jclass clazz, jmethodID methodID, ...);jchar (JNICALL *CallStaticCharMethodV)(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);jchar (JNICALL *CallStaticCharMethodA)(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);jshort (JNICALL *CallStaticShortMethod)(JNIEnv *env, jclass clazz, jmethodID methodID, ...);jshort (JNICALL *CallStaticShortMethodV)(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);jshort (JNICALL *CallStaticShortMethodA)(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);jint (JNICALL *CallStaticIntMethod)(JNIEnv *env, jclass clazz, jmethodID methodID, ...);jint (JNICALL *CallStaticIntMethodV)(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);jint (JNICALL *CallStaticIntMethodA)(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);jlong (JNICALL *CallStaticLongMethod)(JNIEnv *env, jclass clazz, jmethodID methodID, ...);jlong (JNICALL *CallStaticLongMethodV)(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);jlong (JNICALL *CallStaticLongMethodA)(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);jfloat (JNICALL *CallStaticFloatMethod)(JNIEnv *env, jclass clazz, jmethodID methodID, ...);jfloat (JNICALL *CallStaticFloatMethodV)(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);jfloat (JNICALL *CallStaticFloatMethodA)(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);jdouble (JNICALL *CallStaticDoubleMethod)(JNIEnv *env, jclass clazz, jmethodID methodID, ...);jdouble (JNICALL *CallStaticDoubleMethodV)(JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);jdouble (JNICALL *CallStaticDoubleMethodA)(JNIEnv *env, jclass clazz, jmethodID methodID, jvalue *args);void (JNICALL *CallStaticVoidMethod)(JNIEnv *env, jclass cls, jmethodID methodID, ...);void (JNICALL *CallStaticVoidMethodV)(JNIEnv *env, jclass cls, jmethodID methodID, va_list args);void (JNICALL *CallStaticVoidMethodA)(JNIEnv *env, jclass cls, jmethodID methodID, jvalue * args);jfieldID (JNICALL *GetStaticFieldID)(JNIEnv *env, jclass clazz, const char *name, const char *sig);jobject (JNICALL *GetStaticObjectField)(JNIEnv *env, jclass clazz, jfieldID fieldID);jboolean (JNICALL *GetStaticBooleanField)(JNIEnv *env, jclass clazz, jfieldID fieldID);jbyte (JNICALL *GetStaticByteField)(JNIEnv *env, jclass clazz, jfieldID fieldID);jchar (JNICALL *GetStaticCharField)(JNIEnv *env, jclass clazz, jfieldID fieldID);jshort (JNICALL *GetStaticShortField)(JNIEnv *env, jclass clazz, jfieldID fieldID);jint (JNICALL *GetStaticIntField)(JNIEnv *env, jclass clazz, jfieldID fieldID);jlong (JNICALL *GetStaticLongField)(JNIEnv *env, jclass clazz, jfieldID fieldID);jfloat (JNICALL *GetStaticFloatField)(JNIEnv *env, jclass clazz, jfieldID fieldID);jdouble (JNICALL *GetStaticDoubleField)(JNIEnv *env, jclass clazz, jfieldID fieldID);void (JNICALL *SetStaticObjectField)(JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value);void (JNICALL *SetStaticBooleanField)(JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value);void (JNICALL *SetStaticByteField)(JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value);void (JNICALL *SetStaticCharField)(JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value);void (JNICALL *SetStaticShortField)(JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value);void (JNICALL *SetStaticIntField)(JNIEnv *env, jclass clazz, jfieldID fieldID, jint value);void (JNICALL *SetStaticLongField)(JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value);void (JNICALL *SetStaticFloatField)(JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value);void (JNICALL *SetStaticDoubleField)(JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value);jstring (JNICALL *NewString)(JNIEnv *env, const jchar *unicode, jsize len);jsize (JNICALL *GetStringLength)(JNIEnv *env, jstring str);const jchar *(JNICALL *GetStringChars)(JNIEnv *env, jstring str, jboolean *isCopy);void (JNICALL *ReleaseStringChars)(JNIEnv *env, jstring str, const jchar *chars);jstring (JNICALL *NewStringUTF)(JNIEnv *env, const char *utf);jsize (JNICALL *GetStringUTFLength)(JNIEnv *env, jstring str);const char* (JNICALL *GetStringUTFChars)(JNIEnv *env, jstring str, jboolean *isCopy);void (JNICALL *ReleaseStringUTFChars)(JNIEnv *env, jstring str, const char* chars);jsize (JNICALL *GetArrayLength)(JNIEnv *env, jarray array);jobjectArray (JNICALL *NewObjectArray)(JNIEnv *env, jsize len, jclass clazz, jobject init);jobject (JNICALL *GetObjectArrayElement)(JNIEnv *env, jobjectArray array, jsize index);void (JNICALL *SetObjectArrayElement)(JNIEnv *env, jobjectArray array, jsize index, jobject val);jbooleanArray (JNICALL *NewBooleanArray)(JNIEnv *env, jsize len);jbyteArray (JNICALL *NewByteArray)(JNIEnv *env, jsize len);jcharArray (JNICALL *NewCharArray)(JNIEnv *env, jsize len);jshortArray (JNICALL *NewShortArray)(JNIEnv *env, jsize len);jintArray (JNICALL *NewIntArray)(JNIEnv *env, jsize len);jlongArray (JNICALL *NewLongArray)(JNIEnv *env, jsize len);jfloatArray (JNICALL *NewFloatArray)(JNIEnv *env, jsize len);jdoubleArray (JNICALL *NewDoubleArray)(JNIEnv *env, jsize len);jboolean * (JNICALL *GetBooleanArrayElements)(JNIEnv *env, jbooleanArray array, jboolean *isCopy);jbyte * (JNICALL *GetByteArrayElements)(JNIEnv *env, jbyteArray array, jboolean *isCopy);jchar * (JNICALL *GetCharArrayElements)(JNIEnv *env, jcharArray array, jboolean *isCopy);jshort * (JNICALL *GetShortArrayElements)(JNIEnv *env, jshortArray array, jboolean *isCopy);jint * (JNICALL *GetIntArrayElements)(JNIEnv *env, jintArray array, jboolean *isCopy);jlong * (JNICALL *GetLongArrayElements)(JNIEnv *env, jlongArray array, jboolean *isCopy);jfloat * (JNICALL *GetFloatArrayElements)(JNIEnv *env, jfloatArray array, jboolean *isCopy);jdouble * (JNICALL *GetDoubleArrayElements)(JNIEnv *env, jdoubleArray array, jboolean *isCopy);void (JNICALL *ReleaseBooleanArrayElements)(JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode);void (JNICALL *ReleaseByteArrayElements)(JNIEnv *env, jbyteArray array, jbyte *elems, jint mode);void (JNICALL *ReleaseCharArrayElements)(JNIEnv *env, jcharArray array, jchar *elems, jint mode);void (JNICALL *ReleaseShortArrayElements)(JNIEnv *env, jshortArray array, jshort *elems, jint mode);void (JNICALL *ReleaseIntArrayElements)(JNIEnv *env, jintArray array, jint *elems, jint mode);void (JNICALL *ReleaseLongArrayElements)(JNIEnv *env, jlongArray array, jlong *elems, jint mode);void (JNICALL *ReleaseFloatArrayElements)(JNIEnv *env, jfloatArray array, jfloat *elems, jint mode);void (JNICALL *ReleaseDoubleArrayElements)(JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode);void (JNICALL *GetBooleanArrayRegion)(JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);void (JNICALL *GetByteArrayRegion)(JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);void (JNICALL *GetCharArrayRegion)(JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);void (JNICALL *GetShortArrayRegion)(JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);void (JNICALL *GetIntArrayRegion)(JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);void (JNICALL *GetLongArrayRegion)(JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);void (JNICALL *GetFloatArrayRegion)(JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);void (JNICALL *GetDoubleArrayRegion)(JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);void (JNICALL *SetBooleanArrayRegion)(JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);void (JNICALL *SetByteArrayRegion)(JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);void (JNICALL *SetCharArrayRegion)(JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);void (JNICALL *SetShortArrayRegion)(JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);void (JNICALL *SetIntArrayRegion)(JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);void (JNICALL *SetLongArrayRegion)(JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);void (JNICALL *SetFloatArrayRegion)(JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);void (JNICALL *SetDoubleArrayRegion)(JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);jint (JNICALL *RegisterNatives)(JNIEnv *env, jclass clazz, const JNINativeMethod *methods,jint nMethods);jint (JNICALL *UnregisterNatives)(JNIEnv *env, jclass clazz);jint (JNICALL *MonitorEnter)(JNIEnv *env, jobject obj);jint (JNICALL *MonitorExit)(JNIEnv *env, jobject obj);jint (JNICALL *GetJavaVM)(JNIEnv *env, JavaVM **vm);};/** We use inlined functions for C++ so that programmers can write:**    env->FindClass("java/lang/String")** in C++ rather than:**    (*env)->FindClass(env, "java/lang/String")** in C.*/struct JNIEnv_ {const struct JNINativeInterface_ *functions;void *reserved0;void *reserved1[6];#ifdef __cplusplusjint GetVersion() {return functions->GetVersion(this);}jclass DefineClass(const char *name, jobject loader, const jbyte *buf,jsize len) {return functions->DefineClass(this, name, loader, buf, len);}jclass FindClass(const char *name) {return functions->FindClass(this, name);}jclass GetSuperclass(jclass sub) {return functions->GetSuperclass(this, sub);}jboolean IsAssignableFrom(jclass sub, jclass sup) {return functions->IsAssignableFrom(this, sub, sup);}jint Throw(jthrowable obj) {return functions->Throw(this, obj);}jint ThrowNew(jclass clazz, const char *msg) {return functions->ThrowNew(this, clazz, msg);}jthrowable ExceptionOccurred() {return functions->ExceptionOccurred(this);}void ExceptionDescribe() {functions->ExceptionDescribe(this);}void ExceptionClear() {functions->ExceptionClear(this);}void FatalError(const char *msg) {functions->FatalError(this, msg);}jobject NewGlobalRef(jobject lobj) {return functions->NewGlobalRef(this,lobj);}void DeleteGlobalRef(jobject gref) {functions->DeleteGlobalRef(this,gref);}void DeleteLocalRef(jobject obj) {functions->DeleteLocalRef(this, obj);}jboolean IsSameObject(jobject obj1, jobject obj2) {return functions->IsSameObject(this,obj1,obj2);}jobject AllocObject(jclass clazz) {return functions->AllocObject(this,clazz);}jobject NewObject(jclass clazz, jmethodID methodID, ...) {va_list args;jobject result;va_start(args, methodID);result = functions->NewObjectV(this,clazz,methodID,args);va_end(args);return result;}jobject NewObjectV(jclass clazz, jmethodID methodID,va_list args) {return functions->NewObjectV(this,clazz,methodID,args);}jobject NewObjectA(jclass clazz, jmethodID methodID,jvalue *args) {return functions->NewObjectA(this,clazz,methodID,args);}jclass GetObjectClass(jobject obj) {return functions->GetObjectClass(this,obj);}jboolean IsInstanceOf(jobject obj, jclass clazz) {return functions->IsInstanceOf(this,obj,clazz);}jmethodID GetMethodID(jclass clazz, const char *name,const char *sig) {return functions->GetMethodID(this,clazz,name,sig);}jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {va_list args;jobject result;va_start(args,methodID);result = functions->CallObjectMethodV(this,obj,methodID,args);va_end(args);return result;}jobject CallObjectMethodV(jobject obj, jmethodID methodID,va_list args) {return functions->CallObjectMethodV(this,obj,methodID,args);}jobject CallObjectMethodA(jobject obj, jmethodID methodID,jvalue * args) {return functions->CallObjectMethodA(this,obj,methodID,args);}jboolean CallBooleanMethod(jobject obj,jmethodID methodID, ...) {va_list args;jboolean result;va_start(args,methodID);result = functions->CallBooleanMethodV(this,obj,methodID,args);va_end(args);return result;}jboolean CallBooleanMethodV(jobject obj, jmethodID methodID,va_list args) {return functions->CallBooleanMethodV(this,obj,methodID,args);}jboolean CallBooleanMethodA(jobject obj, jmethodID methodID,jvalue * args) {return functions->CallBooleanMethodA(this,obj,methodID, args);}jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {va_list args;jbyte result;va_start(args,methodID);result = functions->CallByteMethodV(this,obj,methodID,args);va_end(args);return result;}jbyte CallByteMethodV(jobject obj, jmethodID methodID,va_list args) {return functions->CallByteMethodV(this,obj,methodID,args);}jbyte CallByteMethodA(jobject obj, jmethodID methodID,jvalue * args) {return functions->CallByteMethodA(this,obj,methodID,args);}jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {va_list args;jchar result;va_start(args,methodID);result = functions->CallCharMethodV(this,obj,methodID,args);va_end(args);return result;}jchar CallCharMethodV(jobject obj, jmethodID methodID,va_list args) {return functions->CallCharMethodV(this,obj,methodID,args);}jchar CallCharMethodA(jobject obj, jmethodID methodID,jvalue * args) {return functions->CallCharMethodA(this,obj,methodID,args);}jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {va_list args;jshort result;va_start(args,methodID);result = functions->CallShortMethodV(this,obj,methodID,args);va_end(args);return result;}jshort CallShortMethodV(jobject obj, jmethodID methodID,va_list args) {return functions->CallShortMethodV(this,obj,methodID,args);}jshort CallShortMethodA(jobject obj, jmethodID methodID,jvalue * args) {return functions->CallShortMethodA(this,obj,methodID,args);}jint CallIntMethod(jobject obj, jmethodID methodID, ...) {va_list args;jint result;va_start(args,methodID);result = functions->CallIntMethodV(this,obj,methodID,args);va_end(args);return result;}jint CallIntMethodV(jobject obj, jmethodID methodID,va_list args) {return functions->CallIntMethodV(this,obj,methodID,args);}jint CallIntMethodA(jobject obj, jmethodID methodID,jvalue * args) {return functions->CallIntMethodA(this,obj,methodID,args);}jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {va_list args;jlong result;va_start(args,methodID);result = functions->CallLongMethodV(this,obj,methodID,args);va_end(args);return result;}jlong CallLongMethodV(jobject obj, jmethodID methodID,va_list args) {return functions->CallLongMethodV(this,obj,methodID,args);}jlong CallLongMethodA(jobject obj, jmethodID methodID,jvalue * args) {return functions->CallLongMethodA(this,obj,methodID,args);}jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {va_list args;jfloat result;va_start(args,methodID);result = functions->CallFloatMethodV(this,obj,methodID,args);va_end(args);return result;}jfloat CallFloatMethodV(jobject obj, jmethodID methodID,va_list args) {return functions->CallFloatMethodV(this,obj,methodID,args);}jfloat CallFloatMethodA(jobject obj, jmethodID methodID,jvalue * args) {return functions->CallFloatMethodA(this,obj,methodID,args);}jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {va_list args;jdouble result;va_start(args,methodID);result = functions->CallDoubleMethodV(this,obj,methodID,args);va_end(args);return result;}jdouble CallDoubleMethodV(jobject obj, jmethodID methodID,va_list args) {return functions->CallDoubleMethodV(this,obj,methodID,args);}jdouble CallDoubleMethodA(jobject obj, jmethodID methodID,jvalue * args) {return functions->CallDoubleMethodA(this,obj,methodID,args);}void CallVoidMethod(jobject obj, jmethodID methodID, ...) {va_list args;va_start(args,methodID);functions->CallVoidMethodV(this,obj,methodID,args);va_end(args);}void CallVoidMethodV(jobject obj, jmethodID methodID,va_list args) {functions->CallVoidMethodV(this,obj,methodID,args);}void CallVoidMethodA(jobject obj, jmethodID methodID,jvalue * args) {functions->CallVoidMethodA(this,obj,methodID,args);}jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz,jmethodID methodID, ...) {va_list args;jobject result;va_start(args,methodID);result = functions->CallNonvirtualObjectMethodV(this,obj,clazz,methodID,args);va_end(args);return result;}jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz,jmethodID methodID, va_list args) {return functions->CallNonvirtualObjectMethodV(this,obj,clazz,methodID,args);}jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz,jmethodID methodID, jvalue * args) {return functions->CallNonvirtualObjectMethodA(this,obj,clazz,methodID,args);}jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz,jmethodID methodID, ...) {va_list args;jboolean result;va_start(args,methodID);result = functions->CallNonvirtualBooleanMethodV(this,obj,clazz,methodID,args);va_end(args);return result;}jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz,jmethodID methodID, va_list args) {return functions->CallNonvirtualBooleanMethodV(this,obj,clazz,methodID,args);}jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz,jmethodID methodID, jvalue * args) {return functions->CallNonvirtualBooleanMethodA(this,obj,clazz,methodID, args);}jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz,jmethodID methodID, ...) {va_list args;jbyte result;va_start(args,methodID);result = functions->CallNonvirtualByteMethodV(this,obj,clazz,methodID,args);va_end(args);return result;}jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz,jmethodID methodID, va_list args) {return functions->CallNonvirtualByteMethodV(this,obj,clazz,methodID,args);}jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz,jmethodID methodID, jvalue * args) {return functions->CallNonvirtualByteMethodA(this,obj,clazz,methodID,args);}jchar CallNonvirtualCharMethod(jobject obj, jclass clazz,jmethodID methodID, ...) {va_list args;jchar result;va_start(args,methodID);result = functions->CallNonvirtualCharMethodV(this,obj,clazz,methodID,args);va_end(args);return result;}jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz,jmethodID methodID, va_list args) {return functions->CallNonvirtualCharMethodV(this,obj,clazz,methodID,args);}jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz,jmethodID methodID, jvalue * args) {return functions->CallNonvirtualCharMethodA(this,obj,clazz,methodID,args);}jshort CallNonvirtualShortMethod(jobject obj, jclass clazz,jmethodID methodID, ...) {va_list args;jshort result;va_start(args,methodID);result = functions->CallNonvirtualShortMethodV(this,obj,clazz,methodID,args);va_end(args);return result;}jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz,jmethodID methodID, va_list args) {return functions->CallNonvirtualShortMethodV(this,obj,clazz,methodID,args);}jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,jmethodID methodID, jvalue * args) {return functions->CallNonvirtualShortMethodA(this,obj,clazz,methodID,args);}jint CallNonvirtualIntMethod(jobject obj, jclass clazz,jmethodID methodID, ...) {va_list args;jint result;va_start(args,methodID);result = functions->CallNonvirtualIntMethodV(this,obj,clazz,methodID,args);va_end(args);return result;}jint CallNonvirtualIntMethodV(jobject obj, jclass clazz,jmethodID methodID, va_list args) {return functions->CallNonvirtualIntMethodV(this,obj,clazz,methodID,args);}jint CallNonvirtualIntMethodA(jobject obj, jclass clazz,jmethodID methodID, jvalue * args) {return functions->CallNonvirtualIntMethodA(this,obj,clazz,methodID,args);}jlong CallNonvirtualLongMethod(jobject obj, jclass clazz,jmethodID methodID, ...) {va_list args;jlong result;va_start(args,methodID);result = functions->CallNonvirtualLongMethodV(this,obj,clazz,methodID,args);va_end(args);return result;}jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz,jmethodID methodID, va_list args) {return functions->CallNonvirtualLongMethodV(this,obj,clazz,methodID,args);}jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz,jmethodID methodID, jvalue * args) {return functions->CallNonvirtualLongMethodA(this,obj,clazz,methodID,args);}jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz,jmethodID methodID, ...) {va_list args;jfloat result;va_start(args,methodID);result = functions->CallNonvirtualFloatMethodV(this,obj,clazz,methodID,args);va_end(args);return result;}jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz,jmethodID methodID,va_list args) {return functions->CallNonvirtualFloatMethodV(this,obj,clazz,methodID,args);}jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz,jmethodID methodID,jvalue * args) {return functions->CallNonvirtualFloatMethodA(this,obj,clazz,methodID,args);}jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz,jmethodID methodID, ...) {va_list args;jdouble result;va_start(args,methodID);result = functions->CallNonvirtualDoubleMethodV(this,obj,clazz,methodID,args);va_end(args);return result;}jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz,jmethodID methodID,va_list args) {return functions->CallNonvirtualDoubleMethodV(this,obj,clazz,methodID,args);}jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz,jmethodID methodID,jvalue * args) {return functions->CallNonvirtualDoubleMethodA(this,obj,clazz,methodID,args);}void CallNonvirtualVoidMethod(jobject obj, jclass clazz,jmethodID methodID, ...) {va_list args;va_start(args,methodID);functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);va_end(args);}void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,jmethodID methodID,va_list args) {functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);}void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,jmethodID methodID,jvalue * args) {functions->CallNonvirtualVoidMethodA(this,obj,clazz,methodID,args);}jfieldID GetFieldID(jclass clazz, const char *name,const char *sig) {return functions->GetFieldID(this,clazz,name,sig);}jobject GetObjectField(jobject obj, jfieldID fieldID) {return functions->GetObjectField(this,obj,fieldID);}jboolean GetBooleanField(jobject obj, jfieldID fieldID) {return functions->GetBooleanField(this,obj,fieldID);}jbyte GetByteField(jobject obj, jfieldID fieldID) {return functions->GetByteField(this,obj,fieldID);}jchar GetCharField(jobject obj, jfieldID fieldID) {return functions->GetCharField(this,obj,fieldID);}jshort GetShortField(jobject obj, jfieldID fieldID) {return functions->GetShortField(this,obj,fieldID);}jint GetIntField(jobject obj, jfieldID fieldID) {return functions->GetIntField(this,obj,fieldID);}jlong GetLongField(jobject obj, jfieldID fieldID) {return functions->GetLongField(this,obj,fieldID);}jfloat GetFloatField(jobject obj, jfieldID fieldID) {return functions->GetFloatField(this,obj,fieldID);}jdouble GetDoubleField(jobject obj, jfieldID fieldID) {return functions->GetDoubleField(this,obj,fieldID);}void SetObjectField(jobject obj, jfieldID fieldID, jobject val) {functions->SetObjectField(this,obj,fieldID,val);}void SetBooleanField(jobject obj, jfieldID fieldID,jboolean val) {functions->SetBooleanField(this,obj,fieldID,val);}void SetByteField(jobject obj, jfieldID fieldID,jbyte val) {functions->SetByteField(this,obj,fieldID,val);}void SetCharField(jobject obj, jfieldID fieldID,jchar val) {functions->SetCharField(this,obj,fieldID,val);}void SetShortField(jobject obj, jfieldID fieldID,jshort val) {functions->SetShortField(this,obj,fieldID,val);}void SetIntField(jobject obj, jfieldID fieldID,jint val) {functions->SetIntField(this,obj,fieldID,val);}void SetLongField(jobject obj, jfieldID fieldID,jlong val) {functions->SetLongField(this,obj,fieldID,val);}void SetFloatField(jobject obj, jfieldID fieldID,jfloat val) {functions->SetFloatField(this,obj,fieldID,val);}void SetDoubleField(jobject obj, jfieldID fieldID,jdouble val) {functions->SetDoubleField(this,obj,fieldID,val);}jmethodID GetStaticMethodID(jclass clazz, const char *name,const char *sig) {return functions->GetStaticMethodID(this,clazz,name,sig);}jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID,...) {va_list args;jobject result;va_start(args,methodID);result = functions->CallStaticObjectMethodV(this,clazz,methodID,args);va_end(args);return result;}jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID,va_list args) {return functions->CallStaticObjectMethodV(this,clazz,methodID,args);}jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID,jvalue *args) {return functions->CallStaticObjectMethodA(this,clazz,methodID,args);}jboolean CallStaticBooleanMethod(jclass clazz,jmethodID methodID, ...) {va_list args;jboolean result;va_start(args,methodID);result = functions->CallStaticBooleanMethodV(this,clazz,methodID,args);va_end(args);return result;}jboolean CallStaticBooleanMethodV(jclass clazz,jmethodID methodID, va_list args) {return functions->CallStaticBooleanMethodV(this,clazz,methodID,args);}jboolean CallStaticBooleanMethodA(jclass clazz,jmethodID methodID, jvalue *args) {return functions->CallStaticBooleanMethodA(this,clazz,methodID,args);}jbyte CallStaticByteMethod(jclass clazz,jmethodID methodID, ...) {va_list args;jbyte result;va_start(args,methodID);result = functions->CallStaticByteMethodV(this,clazz,methodID,args);va_end(args);return result;}jbyte CallStaticByteMethodV(jclass clazz,jmethodID methodID, va_list args) {return functions->CallStaticByteMethodV(this,clazz,methodID,args);}jbyte CallStaticByteMethodA(jclass clazz,jmethodID methodID, jvalue *args) {return functions->CallStaticByteMethodA(this,clazz,methodID,args);}jchar CallStaticCharMethod(jclass clazz,jmethodID methodID, ...) {va_list args;jchar result;va_start(args,methodID);result = functions->CallStaticCharMethodV(this,clazz,methodID,args);va_end(args);return result;}jchar CallStaticCharMethodV(jclass clazz,jmethodID methodID, va_list args) {return functions->CallStaticCharMethodV(this,clazz,methodID,args);}jchar CallStaticCharMethodA(jclass clazz,jmethodID methodID, jvalue *args) {return functions->CallStaticCharMethodA(this,clazz,methodID,args);}jshort CallStaticShortMethod(jclass clazz,jmethodID methodID, ...) {va_list args;jshort result;va_start(args,methodID);result = functions->CallStaticShortMethodV(this,clazz,methodID,args);va_end(args);return result;}jshort CallStaticShortMethodV(jclass clazz,jmethodID methodID, va_list args) {return functions->CallStaticShortMethodV(this,clazz,methodID,args);}jshort CallStaticShortMethodA(jclass clazz,jmethodID methodID, jvalue *args) {return functions->CallStaticShortMethodA(this,clazz,methodID,args);}jint CallStaticIntMethod(jclass clazz,jmethodID methodID, ...) {va_list args;jint result;va_start(args,methodID);result = functions->CallStaticIntMethodV(this,clazz,methodID,args);va_end(args);return result;}jint CallStaticIntMethodV(jclass clazz,jmethodID methodID, va_list args) {return functions->CallStaticIntMethodV(this,clazz,methodID,args);}jint CallStaticIntMethodA(jclass clazz,jmethodID methodID, jvalue *args) {return functions->CallStaticIntMethodA(this,clazz,methodID,args);}jlong CallStaticLongMethod(jclass clazz,jmethodID methodID, ...) {va_list args;jlong result;va_start(args,methodID);result = functions->CallStaticLongMethodV(this,clazz,methodID,args);va_end(args);return result;}jlong CallStaticLongMethodV(jclass clazz,jmethodID methodID, va_list args) {return functions->CallStaticLongMethodV(this,clazz,methodID,args);}jlong CallStaticLongMethodA(jclass clazz,jmethodID methodID, jvalue *args) {return functions->CallStaticLongMethodA(this,clazz,methodID,args);}jfloat CallStaticFloatMethod(jclass clazz,jmethodID methodID, ...) {va_list args;jfloat result;va_start(args,methodID);result = functions->CallStaticFloatMethodV(this,clazz,methodID,args);va_end(args);return result;}jfloat CallStaticFloatMethodV(jclass clazz,jmethodID methodID, va_list args) {return functions->CallStaticFloatMethodV(this,clazz,methodID,args);}jfloat CallStaticFloatMethodA(jclass clazz,jmethodID methodID, jvalue *args) {return functions->CallStaticFloatMethodA(this,clazz,methodID,args);}jdouble CallStaticDoubleMethod(jclass clazz,jmethodID methodID, ...) {va_list args;jdouble result;va_start(args,methodID);result = functions->CallStaticDoubleMethodV(this,clazz,methodID,args);va_end(args);return result;}jdouble CallStaticDoubleMethodV(jclass clazz,jmethodID methodID, va_list args) {return functions->CallStaticDoubleMethodV(this,clazz,methodID,args);}jdouble CallStaticDoubleMethodA(jclass clazz,jmethodID methodID, jvalue *args) {return functions->CallStaticDoubleMethodA(this,clazz,methodID,args);}void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {va_list args;va_start(args,methodID);functions->CallStaticVoidMethodV(this,cls,methodID,args);va_end(args);}void CallStaticVoidMethodV(jclass cls, jmethodID methodID,va_list args) {functions->CallStaticVoidMethodV(this,cls,methodID,args);}void CallStaticVoidMethodA(jclass cls, jmethodID methodID,jvalue * args) {functions->CallStaticVoidMethodA(this,cls,methodID,args);}jfieldID GetStaticFieldID(jclass clazz, const char *name,const char *sig) {return functions->GetStaticFieldID(this,clazz,name,sig);}jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) {return functions->GetStaticObjectField(this,clazz,fieldID);}jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) {return functions->GetStaticBooleanField(this,clazz,fieldID);}jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) {return functions->GetStaticByteField(this,clazz,fieldID);}jchar GetStaticCharField(jclass clazz, jfieldID fieldID) {return functions->GetStaticCharField(this,clazz,fieldID);}jshort GetStaticShortField(jclass clazz, jfieldID fieldID) {return functions->GetStaticShortField(this,clazz,fieldID);}jint GetStaticIntField(jclass clazz, jfieldID fieldID) {return functions->GetStaticIntField(this,clazz,fieldID);}jlong GetStaticLongField(jclass clazz, jfieldID fieldID) {return functions->GetStaticLongField(this,clazz,fieldID);}jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) {return functions->GetStaticFloatField(this,clazz,fieldID);}jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) {return functions->GetStaticDoubleField(this,clazz,fieldID);}void SetStaticObjectField(jclass clazz, jfieldID fieldID,jobject value) {functions->SetStaticObjectField(this,clazz,fieldID,value);}void SetStaticBooleanField(jclass clazz, jfieldID fieldID,jboolean value) {functions->SetStaticBooleanField(this,clazz,fieldID,value);}void SetStaticByteField(jclass clazz, jfieldID fieldID,jbyte value) {functions->SetStaticByteField(this,clazz,fieldID,value);}void SetStaticCharField(jclass clazz, jfieldID fieldID,jchar value) {functions->SetStaticCharField(this,clazz,fieldID,value);}void SetStaticShortField(jclass clazz, jfieldID fieldID,jshort value) {functions->SetStaticShortField(this,clazz,fieldID,value);}void SetStaticIntField(jclass clazz, jfieldID fieldID,jint value) {functions->SetStaticIntField(this,clazz,fieldID,value);}void SetStaticLongField(jclass clazz, jfieldID fieldID,jlong value) {functions->SetStaticLongField(this,clazz,fieldID,value);}void SetStaticFloatField(jclass clazz, jfieldID fieldID,jfloat value) {functions->SetStaticFloatField(this,clazz,fieldID,value);}void SetStaticDoubleField(jclass clazz, jfieldID fieldID,jdouble value) {functions->SetStaticDoubleField(this,clazz,fieldID,value);}jstring NewString(const jchar *unicode, jsize len) {return functions->NewString(this,unicode,len);}jsize GetStringLength(jstring str) {return functions->GetStringLength(this,str);}const jchar *GetStringChars(jstring str, jboolean *isCopy) {return functions->GetStringChars(this,str,isCopy);}void ReleaseStringChars(jstring str, const jchar *chars) {functions->ReleaseStringChars(this,str,chars);}jstring NewStringUTF(const char *utf) {return functions->NewStringUTF(this,utf);}jsize GetStringUTFLength(jstring str) {return functions->GetStringUTFLength(this,str);}const char* GetStringUTFChars(jstring str, jboolean *isCopy) {return functions->GetStringUTFChars(this,str,isCopy);}void ReleaseStringUTFChars(jstring str, const char* chars) {functions->ReleaseStringUTFChars(this,str,chars);}jsize GetArrayLength(jarray array) {return functions->GetArrayLength(this,array);}jobjectArray NewObjectArray(jsize len, jclass clazz,jobject init) {return functions->NewObjectArray(this,len,clazz,init);}jobject GetObjectArrayElement(jobjectArray array, jsize index) {return functions->GetObjectArrayElement(this,array,index);}void SetObjectArrayElement(jobjectArray array, jsize index,jobject val) {functions->SetObjectArrayElement(this,array,index,val);}jbooleanArray NewBooleanArray(jsize len) {return functions->NewBooleanArray(this,len);}jbyteArray NewByteArray(jsize len) {return functions->NewByteArray(this,len);}jcharArray NewCharArray(jsize len) {return functions->NewCharArray(this,len);}jshortArray NewShortArray(jsize len) {return functions->NewShortArray(this,len);}jintArray NewIntArray(jsize len) {return functions->NewIntArray(this,len);}jlongArray NewLongArray(jsize len) {return functions->NewLongArray(this,len);}jfloatArray NewFloatArray(jsize len) {return functions->NewFloatArray(this,len);}jdoubleArray NewDoubleArray(jsize len) {return functions->NewDoubleArray(this,len);}jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) {return functions->GetBooleanArrayElements(this,array,isCopy);}jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) {return functions->GetByteArrayElements(this,array,isCopy);}jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) {return functions->GetCharArrayElements(this,array,isCopy);}jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) {return functions->GetShortArrayElements(this,array,isCopy);}jint * GetIntArrayElements(jintArray array, jboolean *isCopy) {return functions->GetIntArrayElements(this,array,isCopy);}jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) {return functions->GetLongArrayElements(this,array,isCopy);}jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) {return functions->GetFloatArrayElements(this,array,isCopy);}jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) {return functions->GetDoubleArrayElements(this,array,isCopy);}void ReleaseBooleanArrayElements(jbooleanArray array,jboolean *elems,jint mode) {functions->ReleaseBooleanArrayElements(this,array,elems,mode);}void ReleaseByteArrayElements(jbyteArray array,jbyte *elems,jint mode) {functions->ReleaseByteArrayElements(this,array,elems,mode);}void ReleaseCharArrayElements(jcharArray array,jchar *elems,jint mode) {functions->ReleaseCharArrayElements(this,array,elems,mode);}void ReleaseShortArrayElements(jshortArray array,jshort *elems,jint mode) {functions->ReleaseShortArrayElements(this,array,elems,mode);}void ReleaseIntArrayElements(jintArray array,jint *elems,jint mode) {functions->ReleaseIntArrayElements(this,array,elems,mode);}void ReleaseLongArrayElements(jlongArray array,jlong *elems,jint mode) {functions->ReleaseLongArrayElements(this,array,elems,mode);}void ReleaseFloatArrayElements(jfloatArray array,jfloat *elems,jint mode) {functions->ReleaseFloatArrayElements(this,array,elems,mode);}void ReleaseDoubleArrayElements(jdoubleArray array,jdouble *elems,jint mode) {functions->ReleaseDoubleArrayElements(this,array,elems,mode);}void GetBooleanArrayRegion(jbooleanArray array,jsize start, jsize len, jboolean *buf) {functions->GetBooleanArrayRegion(this,array,start,len,buf);}void GetByteArrayRegion(jbyteArray array,jsize start, jsize len, jbyte *buf) {functions->GetByteArrayRegion(this,array,start,len,buf);}void GetCharArrayRegion(jcharArray array,jsize start, jsize len, jchar *buf) {functions->GetCharArrayRegion(this,array,start,len,buf);}void GetShortArrayRegion(jshortArray array,jsize start, jsize len, jshort *buf) {functions->GetShortArrayRegion(this,array,start,len,buf);}void GetIntArrayRegion(jintArray array,jsize start, jsize len, jint *buf) {functions->GetIntArrayRegion(this,array,start,len,buf);}void GetLongArrayRegion(jlongArray array,jsize start, jsize len, jlong *buf) {functions->GetLongArrayRegion(this,array,start,len,buf);}void GetFloatArrayRegion(jfloatArray array,jsize start, jsize len, jfloat *buf) {functions->GetFloatArrayRegion(this,array,start,len,buf);}void GetDoubleArrayRegion(jdoubleArray array,jsize start, jsize len, jdouble *buf) {functions->GetDoubleArrayRegion(this,array,start,len,buf);}void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,jboolean *buf) {functions->SetBooleanArrayRegion(this,array,start,len,buf);}void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,jbyte *buf) {functions->SetByteArrayRegion(this,array,start,len,buf);}void SetCharArrayRegion(jcharArray array, jsize start, jsize len,jchar *buf) {functions->SetCharArrayRegion(this,array,start,len,buf);}void SetShortArrayRegion(jshortArray array, jsize start, jsize len,jshort *buf) {functions->SetShortArrayRegion(this,array,start,len,buf);}void SetIntArrayRegion(jintArray array, jsize start, jsize len,jint *buf) {functions->SetIntArrayRegion(this,array,start,len,buf);}void SetLongArrayRegion(jlongArray array, jsize start, jsize len,jlong *buf) {functions->SetLongArrayRegion(this,array,start,len,buf);}void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,jfloat *buf) {functions->SetFloatArrayRegion(this,array,start,len,buf);}void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,jdouble *buf) {functions->SetDoubleArrayRegion(this,array,start,len,buf);}jint RegisterNatives(jclass clazz, const JNINativeMethod *methods,jint nMethods) {return functions->RegisterNatives(this,clazz,methods,nMethods);}jint UnregisterNatives(jclass clazz) {return functions->UnregisterNatives(this,clazz);}jint MonitorEnter(jobject obj) {return functions->MonitorEnter(this,obj);}jint MonitorExit(jobject obj) {return functions->MonitorExit(this,obj);}jint GetJavaVM(JavaVM **vm) {return functions->GetJavaVM(this,vm);}#endif /* __cplusplus */};/* These structures will be VM-specific. */typedef struct JDK1_1InitArgs {jint version;char **properties;jint checkSource;jint nativeStackSize;jint javaStackSize;jint minHeapSize;jint maxHeapSize;jint verifyMode;char *classpath;jint (JNICALL *vfprintf)(FILE *fp, const char *format, va_list args);void (JNICALL *exit)(jint code);void (JNICALL *abort)();jint enableClassGC;jint enableVerboseGC;jint disableAsyncGC;jint verbose;jboolean debugging;jint debugPort;} JDK1_1InitArgs;typedef struct JDK1_1AttachArgs {void * __padding; /* C compilers don't allow empty structures. */} JDK1_1AttachArgs;/* End VM-specific. */struct JNIInvokeInterface_ {void *reserved0;void *reserved1;void *reserved2;jint (JNICALL *DestroyJavaVM)(JavaVM *vm);jint (JNICALL *AttachCurrentThread)(JavaVM *vm, JNIEnv **penv, void *args);jint (JNICALL *DetachCurrentThread)(JavaVM *vm);};struct JavaVM_ {const struct JNIInvokeInterface_ *functions;void *reserved0;void *reserved1;void *reserved2;#ifdef __cplusplusjint DestroyJavaVM() {return functions->DestroyJavaVM(this);}jint AttachCurrentThread(JNIEnv **penv, void *args) {return functions->AttachCurrentThread(this, penv, args);}jint DetachCurrentThread() {return functions->DetachCurrentThread(this);}#endif};jint JNICALL JNI_GetDefaultJavaVMInitArgs(void *);jint JNICALL JNI_CreateJavaVM(JavaVM **, JNIEnv **, void *);jint JNICALL JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);#ifdef __cplusplus} /* extern "C" */#endif /* __cplusplus */#endif /* JNI_H */
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: