struct JNINativeInterface_ {
void *reserved0;
void *reserved1;
void *reserved2;
void *reserved3;
....
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);
....
};
struct JNIEnv_ {
const struct JNINativeInterface_ *functions;
#ifdef __cplusplus
....
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);
}
....
#endif /* __cplusplus */
};