📄 kni.h
字号:
/* * Copyright (c) 1998-2002 Sun Microsystems, Inc. All Rights Reserved. * * This software 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. * * Use is subject to license terms. *//*======================================================================= * SYSTEM: KVM * SUBSYSTEM: K Native Interface (KNI) * FILE: kni.h * OVERVIEW: KNI definitions and declarations * AUTHORS: Efren A. Serra, Antero Taivalsaari *=======================================================================*//*======================================================================= * KNI is an implementation-level native function interface * for CLDC-category VMs. KNI is intended to be significantly * more lightweight than JNI, so we have made some compromises: * * - Compile-time interface with static linking. * - Source-level (no binary level) compatibility. * - No argument marshalling. Arguments are read explicitly, * and return values are set explicitly. * - No invocation API (cannot call Java from native code). * - No class definition support. * - Limited object allocation support (strings only). * - Limited array region access for arrays of a primitive type. * - No monitorenter/monitorexit support. * - Limited error handling and exception support. * KNI functions do not throw exceptions, but return error * values/null instead, or go fatal for severe errors. * - Exceptions can be thrown explicitly, but no direct * exception manipulation is supported. * * An important goal for the KNI implementation for the * KVM is backwards compatibility. All the native functions * written for the KVM using the earlier pre-KNI style should * still work. *=======================================================================*/#ifndef _KNI_H_#define _KNI_H_/*========================================================================= * Include files *=======================================================================*/#include "global.h"/*========================================================================= * Definitions and declarations *=======================================================================*//* * KNI primitive data types * * Note: jlong is defined in machine_md.h, since its definition * varies from one machine/compiler to another. */typedef unsigned char jboolean;typedef signed char jbyte;typedef unsigned short jchar;typedef short jshort;typedef long jint;typedef float jfloat;typedef double jdouble;typedef long jsize;/* * KNI reference data types * * Note: jfieldID and jobject are intended to be opaque * types. The programmer should not make any assumptions * about the actual type of these types, since the actual * type may vary from one KNI implementation to another. * * In the KVM implementation of KNI, we use the corresponding * KVM-specific types to make debugging easier. */typedef FIELD jfieldID;typedef cell** 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;/* * KNI return types * * The KNI implementation uses these type declarations * to define the actual machine-specific return type of * a KNI function. * * Note: KNI return types are intended to be opaque types. * On the KVM, all these return types are defined as 'void', * but their definition may vary from one VM to another. */typedef void KNI_RETURNTYPE_VOID;typedef void KNI_RETURNTYPE_BOOLEAN;typedef void KNI_RETURNTYPE_BYTE;typedef void KNI_RETURNTYPE_CHAR;typedef void KNI_RETURNTYPE_SHORT;typedef void KNI_RETURNTYPE_INT;typedef void KNI_RETURNTYPE_LONG;typedef void KNI_RETURNTYPE_FLOAT;typedef void KNI_RETURNTYPE_DOUBLE;typedef void KNI_RETURNTYPE_OBJECT;/* * jboolean constants */#define KNI_TRUE 1#define KNI_FALSE 0/* * Return values for KNI functions. * Values correspond to JNI. */#define KNI_OK 0 /* Success */#define KNI_ERR (-1) /* Unknown error */#define KNI_ENOMEM (-4) /* Not enough memory */#define KNI_EINVAL (-6) /* Invalid arguments */#ifdef __cplusplus# define KNIEXPORT extern "C"#else# define KNIEXPORT extern#endif /* __cplusplus *//* * Version information */#define KNI_VERSION 0x00010000 /* KNI version 1.0 *//*========================================================================= * KNI functions (refer to KNI Specification for details) *=======================================================================*//* Version information */KNIEXPORT jint KNI_GetVersion();/* Class and interface operations */KNIEXPORT void KNI_FindClass(const char* name, jclass classHandle);KNIEXPORT void KNI_GetSuperClass(jclass classHandle, jclass superclassHandle);KNIEXPORT jboolean KNI_IsAssignableFrom(jclass classHandle1, jclass classHandle2);/* Exceptions and errors */KNIEXPORT jint KNI_ThrowNew(const char* name, const char* message);KNIEXPORT void KNI_FatalError(const char* message);/* Object operations */KNIEXPORT void KNI_GetObjectClass(jobject objectHandle, jclass classHandle);KNIEXPORT jboolean KNI_IsInstanceOf(jobject objectHandle, jclass classHandle);/* Instance field access */KNIEXPORT jfieldID KNI_GetFieldID(jclass classHandle, const char* name, const char* signature);KNIEXPORT jboolean KNI_GetBooleanField(jobject objectHandle, jfieldID fieldID);KNIEXPORT jbyte KNI_GetByteField(jobject objectHandle, jfieldID fieldID);KNIEXPORT jchar KNI_GetCharField(jobject objectHandle, jfieldID fieldID);KNIEXPORT jshort KNI_GetShortField(jobject objectHandle, jfieldID fieldID);KNIEXPORT jint KNI_GetIntField(jobject objectHandle, jfieldID fieldID);KNIEXPORT jfloat KNI_GetFloatField(jobject objectHandle, jfieldID fieldID);KNIEXPORT jlong KNI_GetLongField(jobject objectHandle, jfieldID fieldID);KNIEXPORT jdouble KNI_GetDoubleField(jobject objectHandle, jfieldID fieldID);KNIEXPORT void KNI_GetObjectField(jobject objectHandle, jfieldID fieldID, jobject toHandle);KNIEXPORT void KNI_SetBooleanField(jobject objectHandle, jfieldID fieldID, jboolean value);KNIEXPORT void KNI_SetByteField(jobject objectHandle, jfieldID fieldID, jbyte value);KNIEXPORT void KNI_SetCharField(jobject objectHandle, jfieldID fieldID, jchar value);KNIEXPORT void KNI_SetShortField(jobject objectHandle, jfieldID fieldID, jshort value);KNIEXPORT void KNI_SetIntField(jobject objectHandle, jfieldID fieldID, jint value);KNIEXPORT void KNI_SetFloatField(jobject objectHandle, jfieldID fieldID, jfloat value);KNIEXPORT void KNI_SetLongField(jobject objectHandle, jfieldID fieldID, jlong value);KNIEXPORT void KNI_SetDoubleField(jobject objectHandle, jfieldID fieldID, jdouble value);KNIEXPORT void KNI_SetObjectField(jobject objectHandle, jfieldID fieldID, jobject fromHandle);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -