00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef JNIWRAPPER_H
00010 #define JNIWRAPPER_H
00011
00012 #include "JavaQxCommon.h"
00013
00014
00015
00016
00017
00024 class JAVAQX_EXPORT JNIWrapper
00025 {
00026 public:
00027 static void checkException(JNIEnv *env);
00028 static bool testException(JNIEnv *env);
00029 static void fatalError(JNIEnv *env, const char *errorMessage);
00030 static void throwInternalError(JNIEnv *env, const char *errorMessage = 0);
00031 static void throwOutOfMemoryError(JNIEnv *env, const char *errorMessage = 0);
00032 static void throwRuntimeExcpetion(JNIEnv *env,
00033 const char *exceptionMessage = 0);
00034 static jfieldID getFieldID(JNIEnv *env, jclass cls, const char *name,
00035 const char *sig);
00036 static jfieldID getStaticFieldID(JNIEnv *env, jclass cls, const char *name,
00037 const char *sig);
00038 static jmethodID getMethodID(JNIEnv *env, jclass cls, const char *name,
00039 const char *sig);
00040 static jmethodID getStaticMethodID(JNIEnv *env, jclass cls, const char *name,
00041 const char *sig);
00042 static jobject getObjectField(JNIEnv *env, jobject obj, jfieldID fieldID);
00043 static void setObjectField(JNIEnv *env, jobject obj, jfieldID fieldID,
00044 jobject val);
00045 static jboolean getBooleanField(JNIEnv *env, jobject obj, jfieldID fieldID);
00046 static void setBooleanField(JNIEnv *env, jobject obj, jfieldID fieldID,
00047 jboolean val);
00048 static jbyte getByteField(JNIEnv *env, jobject obj, jfieldID fieldID);
00049 static void setByteField(JNIEnv *env, jobject obj, jfieldID fieldID,
00050 jbyte val);
00051 static jchar getCharField(JNIEnv *env, jobject obj, jfieldID fieldID);
00052 static void setCharField(JNIEnv *env, jobject obj, jfieldID fieldID,
00053 jchar val);
00054 static jshort getShortField(JNIEnv *env, jobject obj, jfieldID fieldID);
00055 static void setShortField(JNIEnv *env, jobject obj, jfieldID fieldID,
00056 jshort val);
00057 static jint getIntField(JNIEnv *env, jobject obj, jfieldID fieldID);
00058 static void setIntField(JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
00059 static jlong getLongField(JNIEnv *env, jobject obj, jfieldID fieldID);
00060 static void setLongField(JNIEnv *env, jobject obj, jfieldID fieldID,
00061 jlong val);
00062 static jfloat getFloatField(JNIEnv *env, jobject obj, jfieldID fieldID);
00063 static void setFloatField(JNIEnv *env, jobject obj, jfieldID fieldID,
00064 jfloat val);
00065 static jdouble getDoubleField(JNIEnv *env, jobject obj, jfieldID fieldID);
00066 static void setDoubleField(JNIEnv *env, jobject obj, jfieldID fieldID,
00067 jdouble val);
00068 static bool callObjectMethod(JNIEnv *env, jobject &result, jobject obj,
00069 jmethodID methodID, va_list &args);
00070 static bool callObjectMethod(JNIEnv *env, jobject &result, jobject obj,
00071 jmethodID methodID, ...);
00072 static bool callBooleanMethod(JNIEnv *env, jboolean &result, jobject obj,
00073 jmethodID methodID, va_list &args);
00074 static bool callBooleanMethod(JNIEnv *env, jboolean &result, jobject obj,
00075 jmethodID methodID, ...);
00076 static bool callByteMethod(JNIEnv *env, jbyte &result, jobject obj,
00077 jmethodID methodID, va_list &args);
00078 static bool callByteMethod(JNIEnv *env, jbyte &result, jobject obj,
00079 jmethodID methodID, ...);
00080 static bool callCharMethod(JNIEnv *env, jchar &result, jobject obj,
00081 jmethodID methodID, va_list &args);
00082 static bool callCharMethod(JNIEnv *env, jchar &result, jobject obj,
00083 jmethodID methodID, ...);
00084 static bool callShortMethod(JNIEnv *env, jshort &result, jobject obj,
00085 jmethodID methodID, va_list &args);
00086 static bool callShortMethod(JNIEnv *env, jshort &result, jobject obj,
00087 jmethodID methodID, ...);
00088 static bool callIntMethod(JNIEnv *env, jint &result, jobject obj,
00089 jmethodID methodID, va_list &args);
00090 static bool callIntMethod(JNIEnv *env, jint &result, jobject obj,
00091 jmethodID methodID, ...);
00092 static bool callLongMethod(JNIEnv *env, jlong &result, jobject obj,
00093 jmethodID methodID, va_list &args);
00094 static bool callLongMethod(JNIEnv *env, jlong &result, jobject obj,
00095 jmethodID methodID, ...);
00096 static bool callFloatMethod(JNIEnv *env, jfloat &result, jobject obj,
00097 jmethodID methodID, va_list &args);
00098 static bool callFloatMethod(JNIEnv *env, jfloat &result, jobject obj,
00099 jmethodID methodID, ...);
00100 static bool callDoubleMethod(JNIEnv *env, jdouble &result, jobject obj,
00101 jmethodID methodID, va_list &args);
00102 static bool callDoubleMethod(JNIEnv *env, jdouble &result, jobject obj,
00103 jmethodID methodID, ...);
00104 static bool callVoidMethod(JNIEnv *env, jobject obj, jmethodID methodID,
00105 va_list &args);
00106 static bool callVoidMethod(JNIEnv *env, jobject obj, jmethodID methodID, ...);
00107 static jstring toString(JNIEnv *env, jobject obj);
00108 static jstring newString(JNIEnv *env, const jchar *uchars, jsize len);
00109 static jstring newStringUTF(JNIEnv *env, const char *bytes);
00110 static bool callStaticVoidMethod(JNIEnv *env, jclass cls, jmethodID methodID,
00111 va_list &args);
00112 static bool callStaticVoidMethod(JNIEnv *env, jclass cls, jmethodID methodID,
00113 ...);
00114 static bool callStaticIntMethod(JNIEnv *env, jint &result, jclass cls,
00115 jmethodID methodID, va_list &args);
00116 static bool callStaticIntMethod(JNIEnv *env, jint &result, jclass cls,
00117 jmethodID methodID, ...);
00118 static jobject newObject(JNIEnv *env, jclass cls, jmethodID constructor,
00119 va_list &args);
00120 static jobject newObject(JNIEnv *env, jclass cls, jmethodID constructor, ...);
00121 static jobjectArray newObjectArray(JNIEnv *env, jclass cls, jsize len);
00122 static jobjectArray newStringArray(JNIEnv *env, jsize len);
00123 static jbyteArray newByteArray(JNIEnv *env, jsize len);
00124 static jobject newGlobalRef(JNIEnv *env, jobject obj);
00125 static jweak newWeakGlobalRef(JNIEnv *env, jobject obj);
00126 static void deleteGlobalRef(JNIEnv *env, jobject &objref);
00127 static void deleteWeakGlobalRef(JNIEnv *env, jweak &wobjref);
00128 static bool isLiveRef(JNIEnv *env, jweak wobjref);
00129 public:
00130 inline static jclass objectClass();
00131 inline static jclass stringClass();
00132 inline static jmethodID toStringMID();
00133 private:
00134 friend class JVMWrapper;
00135 static void initialize(JNIEnv *env);
00136 private:
00137 static jclass sm_objectClass;
00138 static jclass sm_stringClass;
00139 static jmethodID sm_toStringMID;
00140 };
00141
00142
00143
00144
00145
00151 inline jclass JNIWrapper::objectClass()
00152 {
00153 return sm_objectClass;
00154 }
00155
00161 inline jclass JNIWrapper::stringClass()
00162 {
00163 return sm_stringClass;
00164 }
00165
00171 inline jmethodID JNIWrapper::toStringMID()
00172 {
00173 return sm_toStringMID;
00174 }
00175
00176 #endif // JNIWRAPPER_H
00177
00178
00179
00180
00181
00182
00183
00184