예를들어 자바 클래스 A가 있고 아래와 같은 정의가 있을 때
A.java
class A {
int aa;
byte [] bb;
static {loadlibrary(...);}
native void func();
}

native.cpp
JNIEXPORT void JNICALL func(JNIEnv *e, jobject self)
{
jclass cls = e->GetObjectClass(self);
jfieldID aaId = e->GetFieldID(cls, "aa", "I");
jfieldID bbId = e->GetFieldID(cls, "bb", "[B");

jint aa = e->GetObjectField(self, aaId);
jbytearray bb = e->GetObjectField(self, bbId);
....
}

만약 String 변수를 사용하는경우

jstring str = e->GetObjectField(self, fid); const char * pcName = _env->GetStringUTFChars(jstr, NULL); strcpy(user.caName, pcName); e->ReleaseStringUTFChars(jstr, pcName); // ReleaseStringUTFChars 반드시 해준다.



밑의 표는 GetFieldID 의 3번째 인자에 넣을 값이다.

Type Signature

Java Type

Z

boolean

B

byte

C

char

S

short

I

int

J

long

F

float

D

double

L fully-qualified-class ;

fully-qualified-class

[ type

type[]

( arg-types ) ret-type

method type




+ Recent posts