kvm에 Native코드 추가 하는 방법
1. kvm/cldc/j2me_cldc/api/src/에 추가한 .java파일을 복사한다.
나중에 kvm작성시 저절로 컴파일이 된다.
2. kni네이티브코드 작성법을 참고 하여 코드를 작성한다.
3. 작성한 .c파일을 가지고 j2me_cldc/kvm/VmUnix/src에 복사를 한다.
4. kvm/cldc/j2me_cldc/kvm/VmUnix/build/Makefile에 추가한 native파일명을 기술한다.
(나중에 컴파일시에 같이 컴파일 되려면 같이 물려줘야한다.)
5. build디렉토리로 가서 make USE_KNI=true하여 KNI를 Enable한다.
6. kvm -classpath 로 실행을 한다.
- nativeFunctionTableUnix.c고치는 방법
nativeFunctionTableUnix.c는 kvm컴파일 시에 자동으로 생성되는 파일이므로
외부에서 고치면안된다.
Posted by 초코리
트랙백 보낼 주소 :: http://chokori.tistory.com/trackback/6
//KNI에서 중점적으로 사용되는 헤더파일들
//함수 앞에 붙여줘야한다.
#ifdef __cplusplus
# define KNIEXPORT extern "C"
#else
# define KNIEXPORT extern
#endif /* __cplusplus */
//KNI 리턴타입을 정의
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 operations (implemented as macros on the KVM) */
#define KNI_ReturnVoid() \
#define KNI_ReturnBoolean(value) \
#define KNI_ReturnByte(value) \
#define KNI_ReturnChar(value) \
#define KNI_ReturnShort(value) \
#define KNI_ReturnInt(value) \
#define KNI_ReturnLong(value) \
#define KNI_ReturnFloat(value) \
#define KNI_ReturnDouble(value) \
/* Parameter access */
KNIEXPORT jboolean KNI_GetParameterAsBoolean(jint index);
KNIEXPORT jbyte KNI_GetParameterAsByte(jint index);
KNIEXPORT jchar KNI_GetParameterAsChar(jint index);
KNIEXPORT jshort KNI_GetParameterAsShort(jint index);
KNIEXPORT jint KNI_GetParameterAsInt(jint index);
KNIEXPORT jfloat KNI_GetParameterAsFloat(jint index);
KNIEXPORT jlong KNI_GetParameterAsLong(jint index);
KNIEXPORT jdouble KNI_GetParameterAsDouble(jint index);
KNIEXPORT void KNI_GetParameterAsObject(jint index, jobject toHandle);
KNIEXPORT void KNI_GetThisPointer(jobject toHandle);
KNIEXPORT void KNI_GetClassPointer(jclass toHandle);
Exception
------------------ ThrowNew02.c
#include <kni.h>
void Java_com_sun_kvmqa_kni_ThrowNew_ThrowNew02_doException(TRAPS) {
if(KNI_ThrowNew("java/lang/UnexistentException", "Unexistent
Exception!")==KNI_ERR)
KNI_SetResultAsVoid();
}
Posted by 초코리
트랙백 보낼 주소 :: http://chokori.tistory.com/trackback/4