jclass RC_DefineClass(JNIEnv * env, const char * c, jobject loader, const jbyte * buf, jsize bufLen);
jclass RC_FindClass(JNIEnv * env, const char *classname);
jmethodID RC_FromReflectedMethod(JNIEnv * env, jobject mthdobj);
-jmethodID RC_FromReflectedField(JNIEnv * env, jobject fldobj);
+jfieldID RC_FromReflectedField(JNIEnv * env, jobject fldobj);
jobject RC_ToReflectedMethod(JNIEnv * env, jclass classobj, jmethodID methodobj, jboolean flag);
jclass RC_GetSuperclass(JNIEnv * env, jclass classobj);
jboolean RC_IsAssignableFrom(JNIEnv *, jclass, jclass);
jboolean RC_IsInstanceOf(JNIEnv * env, jobject obj, jclass cls);
jmethodID RC_GetMethodID(JNIEnv * env, jclass cls, const char * str1, const char * str2);
-#define CALLMETHOD(R, T) R RC_Call ## T ## Method(JNIEnv *env, jobject obj, jmethodID mid, ...);
+#define DCALLMETHOD(R, T) R RC_Call ## T ## Method(JNIEnv *env, jobject obj, jmethodID mid, ...);
-#define CALLMETHODV(R, T) R RC_Call ## T ## MethodV(JNIEnv * env, jobject obj, jmethodID mid, va_list va);
+#define DCALLMETHODV(R, T) R RC_Call ## T ## MethodV(JNIEnv * env, jobject obj, jmethodID mid, va_list va);
-#define CALLMETHODA(R, T) R RC_Call ## T ## MethodA(JNIEnv * env, jobject obj, jmethodID mid, const jvalue * valarray);
+#define DCALLMETHODA(R, T) R RC_Call ## T ## MethodA(JNIEnv * env, jobject obj, jmethodID mid, const jvalue * valarray);
-#define CALLNVMETHOD(R, T) R RC_CallNonvirtual ## T ## Method(JNIEnv *env, jobject obj, jmethodID mid, ...);
+#define DCALLNVMETHOD(R, T) R RC_CallNonvirtual ## T ## Method(JNIEnv *env, jobject obj, jclass cls, jmethodID mid, ...);
-#define CALLNVMETHODV(R, T) R RC_CallNonvirtual ## T ## MethodV(JNIEnv * env, jobject obj, jmethodID mid, va_list va);
+#define DCALLNVMETHODV(R, T) R RC_CallNonvirtual ## T ## MethodV(JNIEnv * env, jobject obj, jclass cls, jmethodID mid, va_list va);
-#define CALLNVMETHODA(R, T) R RC_CallNonvirtual ## T ## MethodA(JNIEnv * env, jobject obj, jmethodID mid, const jvalue * valarray);
+#define DCALLNVMETHODA(R, T) R RC_CallNonvirtual ## T ## MethodA(JNIEnv * env, jobject obj, jclass cls, jmethodID mid, const jvalue * valarray);
-#define GETFIELD(R, T) R RC_Get ## T ## Field(JNIEnv *env, jobject obj, jfieldID fld);
+#define DGETFIELD(R, T) R RC_Get ## T ## Field(JNIEnv *env, jobject obj, jfieldID fld);
-#define SETFIELD(R, T) void RC_Set ## T ## Field(JNIEnv *env, jobject obj, jfieldID fld, R src);
+#define DSETFIELD(R, T) void RC_Set ## T ## Field(JNIEnv *env, jobject obj, jfieldID fld, R src);
-#define CALLSTMETHOD(R, T) R RC_CallStatic ## T ## Method(JNIEnv *env, jobject obj, jmethodID mid, ...);
+#define DCALLSTMETHOD(R, T) R RC_CallStatic ## T ## Method(JNIEnv *env, jobject obj, jmethodID mid, ...);
-#define CALLSTMETHODV(R, T) R RC_CallStatic ## T ## MethodV(JNIEnv * env, jobject obj, jmethodID mid, va_list va);
+#define DCALLSTMETHODV(R, T) R RC_CallStatic ## T ## MethodV(JNIEnv * env, jobject obj, jmethodID mid, va_list va);
-#define CALLSTMETHODA(R, T) R RC_CallStatic ## T ## MethodA(JNIEnv * env, jobject obj, jmethodID mid, const jvalue * valarray);
+#define DCALLSTMETHODA(R, T) R RC_CallStatic ## T ## MethodA(JNIEnv * env, jobject obj, jmethodID mid, const jvalue * valarray);
-#define GETSTFIELD(R, T) R RC_GetStatic ## T ## Field(JNIEnv *env, jclass cls, jfieldID fld);
+#define DGETSTFIELD(R, T) R RC_GetStatic ## T ## Field(JNIEnv *env, jclass cls, jfieldID fld);
-#define SETSTFIELD(R, T) void RC_SetStatic ## T ## Field(JNIEnv *env, jclass cls, jfieldID fld, R src);
+#define DSETSTFIELD(R, T) void RC_SetStatic ## T ## Field(JNIEnv *env, jclass cls, jfieldID fld, R src);
-#define NEWARRAY(R, T) R ## Array RC_New ## T ## Array(JNIEnv *env, jsize size);
+#define DNEWARRAY(R, T) R ## Array RC_New ## T ## Array(JNIEnv *env, jsize size);
-#define GETARRAY(R, T) R * RC_Get ## T ## ArrayElements(JNIEnv *env, R ## Array array, jboolean * b);
+#define DGETARRAY(R, T) R * RC_Get ## T ## ArrayElements(JNIEnv *env, R ## Array array, jboolean * b);
-#define RELEASEARRAY(R, T) void RC_Release ## T ## ArrayElements(JNIEnv *env, R ## Array array, R * ptr, jint num);
+#define DRELEASEARRAY(R, T) void RC_Release ## T ## ArrayElements(JNIEnv *env, R ## Array array, R * ptr, jint num);
-#define GETARRAYREGION(R, T) void RC_Get ## T ## ArrayRegion(JNIEnv *env, R ## Array array, jsize size1, jsize size2, R * ptr);
+#define DGETARRAYREGION(R, T) void RC_Get ## T ## ArrayRegion(JNIEnv *env, R ## Array array, jsize size1, jsize size2, R * ptr);
-#define SETARRAYREGION(R, T) void RC_Set ## T ## ArrayRegion(JNIEnv *env, R ## Array array, jsize size1, jsize size2, const R * ptr);
+#define DSETARRAYREGION(R, T) void RC_Set ## T ## ArrayRegion(JNIEnv *env, R ## Array array, jsize size1, jsize size2, const R * ptr);
-#define CALLSET(R, T) \
- CALLMETHODV(R, T) \
- CALLMETHOD(R, T) \
- CALLMETHODA(R, T) \
- CALLNVMETHODV(R, T) \
- CALLNVMETHOD(R, T) \
- CALLNVMETHODA(R, T) \
- GETFIELD(R, T) \
- SETFIELD(R, T) \
- CALLSTMETHODV(R, T) \
- CALLSTMETHOD(R, T) \
- CALLSTMETHODA(R, T) \
- GETSTFIELD(R, T) \
- SETSTFIELD(R, T) \
- NEWARRAY(R, T) \
- GETARRAY(R, T) \
- RELEASEARRAY(R, T) \
- GETARRAYREGION(R, T) \
- SETARRAYREGION(R, T)
+#define DCALLSET(R, T) \
+ DCALLMETHODV(R, T) \
+ DCALLMETHOD(R, T) \
+ DCALLMETHODA(R, T) \
+ DCALLNVMETHODV(R, T) \
+ DCALLNVMETHOD(R, T) \
+ DCALLNVMETHODA(R, T) \
+ DGETFIELD(R, T) \
+ DSETFIELD(R, T) \
+ DCALLSTMETHODV(R, T) \
+ DCALLSTMETHOD(R, T) \
+ DCALLSTMETHODA(R, T) \
+ DGETSTFIELD(R, T) \
+ DSETSTFIELD(R, T) \
+ DNEWARRAY(R, T) \
+ DGETARRAY(R, T) \
+ DRELEASEARRAY(R, T) \
+ DGETARRAYREGION(R, T) \
+ DSETARRAYREGION(R, T)
-CALLSET(jobject, Object);
-CALLSET(jboolean, Boolean);
-CALLSET(jbyte, Byte);
-CALLSET(jchar, Char);
-CALLSET(jshort, Short);
-CALLSET(jint, Int);
-CALLSET(jlong, Long);
-CALLSET(jfloat, Float);
-CALLSET(jdouble, Double);
+DCALLMETHODV(jobject, Object)
+DCALLMETHOD(jobject, Object)
+DCALLMETHODA(jobject, Object)
+DCALLNVMETHODV(jobject, Object)
+DCALLNVMETHOD(jobject, Object)
+DCALLNVMETHODA(jobject, Object)
+DGETFIELD(jobject, Object)
+DSETFIELD(jobject, Object)
+DCALLSTMETHODV(jobject, Object)
+DCALLSTMETHOD(jobject, Object)
+DCALLSTMETHODA(jobject, Object)
+DGETSTFIELD(jobject, Object)
+DSETSTFIELD(jobject, Object)
+DGETARRAY(jobject, Object)
+DRELEASEARRAY(jobject, Object)
+DGETARRAYREGION(jobject, Object)
+DSETARRAYREGION(jobject, Object)
+DCALLSET(jboolean, Boolean);
+DCALLSET(jbyte, Byte);
+DCALLSET(jchar, Char);
+DCALLSET(jshort, Short);
+DCALLSET(jint, Int);
+DCALLSET(jlong, Long);
+DCALLSET(jfloat, Float);
+DCALLSET(jdouble, Double);
+
+jobjectArray RC_NewObjectArray(JNIEnv *env, jsize size, jclass cls, jobject obj);
void RC_CallVoidMethodV(JNIEnv * env, jobject obj, jmethodID mid, va_list va);
void RC_CallVoidMethod(JNIEnv *env, jobject obj, jmethodID mid, ...);
void RC_CallVoidMethodA(JNIEnv * env, jobject obj, jmethodID mid, const jvalue * valarray);
void RC_CallStaticVoidMethod(JNIEnv *env, jclass cls, jmethodID mid, ...);
void RC_CallStaticVoidMethodV(JNIEnv * env, jclass cls, jmethodID mid, va_list va);
void RC_CallStaticVoidMethodA(JNIEnv * env, jclass cls, jmethodID mid, const jvalue * valarray);
-void RC_CallNonvirtualVoidMethod(JNIEnv *env, jobject obj, jmethodID mid, ...);
-void RC_CallNonvirtualVoidMethodV(JNIEnv * env, jobject obj, jmethodID mid, va_list va);
-void RC_CallNonvirtualVoidMethodA(JNIEnv * env, jobject obj, jmethodID mid, const jvalue * valarray);
+void RC_CallNonvirtualVoidMethod(JNIEnv *env, jobject obj, jclass cls, jmethodID mid, ...);
+void RC_CallNonvirtualVoidMethodV(JNIEnv * env, jobject obj, jclass cls, jmethodID mid, va_list va);
+void RC_CallNonvirtualVoidMethodA(JNIEnv * env, jobject obj, jclass cls, jmethodID mid, const jvalue * valarray);
jfieldID RC_GetFieldID(JNIEnv * env, jclass cls, const char * str1, const char * str2);
jmethodID RC_GetStaticMethodID(JNIEnv * env, jclass cls, const char * str1, const char * str2);
jfieldID RC_GetStaticFieldID(JNIEnv * env, jclass cls, const char * str1, const char * str2);