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 초코리
태그 KNI, KVM
//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 초코리
태그 KNI, KVM

카테고리

이것저것 보기 (162)
초코리 (59)
울가족 (14)
프로그래밍 (20)
Apple (4)
리눅스 (42)
임베디드 (3)
관심분야 (3)
미국 (0)

달력

«   2012/02   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29