JNI有两种基本数据类型基本数据类型和引用数据类型
基本数据类型在jnt.h中可以找到
//如果没在jni_md.中定义好的话 #ifndef JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H //就使用下面的定义 typedef unsigned char jboolean; typedef unsigned short jchar; typedef short jshort; typedef float jfloat; typedef double jdouble; typedef jint jsize;
找到jnt_md.h中的数据定义
在jnt_md.h中找到如上定义,根据环境选择数据类型,根据X86架构找到jni_x86.h文件
#ifndef _JAVASOFT_JNI_MD_H_
#define _JAVASOFT_JNI_MD_H_
#if defined(SOLARIS) || defined(LINUX) || defined(_ALLBSD_SOURCE)
// Note: please do not change these without also changing jni_md.h in the JDK
// repository
#ifndef __has_attribute
#define __has_attribute(x) 0
#endif
#if (defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4) && (__GNUC_MINOR__ > 2))) || __has_attribute(visibility)
#define JNIEXPORT __attribute__((visibility("default")))
#define JNIIMPORT __attribute__((visibility("default")))
#else
#define JNIEXPORT
#define JNIIMPORT
#endif
#define JNICALL
typedef int jint;
#if defined(_LP64)
typedef long jlong;
#else
typedef long long jlong;
#endif
#else
#define JNIEXPORT __declspec(dllexport)
#define JNIIMPORT __declspec(dllimport)
#define JNICALL __stdcall
typedef int jint;
typedef __int64 jlong;
#endif
typedef signed char jbyte;
#endif
引用数据类型
方法签名时用到的公共体类型
typedef union jvalue {
jboolean z;
jbyte b;
jchar c;
jshort s;
jint i;
jlong j;
jfloat f;
jdouble d;
jobject l;
} jvalue;
属性ID和方法ID的定义
struct _jfieldID; typedef struct _jfieldID *jfieldID; struct _jmethodID; typedef struct _jmethodID *jmethodID;四种不同引用类型的定义
typedef enum _jobjectType {
JNIInvalidRefType = 0,
JNILocalRefType = 1,
JNIGlobalRefType = 2,
JNIWeakGlobalRefType = 3
} jobjectRefType;
分别为JNIInvalidRefType(无效引用)、JNILocalRefType(本地引用)、JNIWeakGlobalRefType(弱全局引用)和JNIGlobalRefType(全局引用)的枚举类型
JNI错误类型的定义#define JNI_FALSE 0 #define JNI_TRUE 1 #define JNI_OK 0 #define JNI_ERR (-1) #define JNI_EDETACHED (-2) #define JNI_EVERSION (-3) #define JNI_ENOMEM (-4) #define JNI_EEXIST (-5) #define JNI_EINVAL (-6) #define JNI_COMMIT 1 #define JNI_ABORT 2



