2011-09-14 4 views
3

내 Java 클래스 코드 조각 .JNI를 사용하여 내 C 파일에서 getReg_chal() 메서드에 액세스하려고합니다.JNI char [] (char 배열)의 메소드 기술자는 무엇입니까?

public char[] getReg_chal() { 
     return reg_chal; 
    } 

일부 jni 작업을 수행하는 내 C 파일 :

mid = (*env)->GetMethodID(env, info, "getReg_chal()", "()I"); 

mid = (*env)->GetMethodID(env, info, "getReg_chal()", ***); 

메서드를 알고 싶습니다. 내 char []에 대한 설명자. "() I"를 쓰면 Int()에 사용 되었기 때문에 가짜 메소드 설명자 오류가 발생합니다. 내가 *로 무엇을 채울 것인가? 도와주세요. 미리 감사드립니다.

답변

3

메소드 서명은 "()[C"입니다.

세부 사항은 herehere입니다.

메소드 ID를 사용하여 메소드를 호출하려면, 당신은 단지 가짜 방법 오류가 사라 메서드 서명을 변경 한 후

jobject obj = ... // This is the object you want to call the method on 
jcharArray arr = (jcharArray) (*env)->CallObjectMethod(env, obj, mid); 
int count = (*env)->GetArrayLength(env, arr); 
jchar* chars = (*env)->GetCharArrayElements(env, arr, 0); 
// Here, "chars" is a C pointer to an array of "count" characters. It's NOT 
// going to be 0-terminated, so be careful! Here's where you would do your 
// logging or whatever. One possible way to do this is by turning the `jchar` 
// array into a proper 0-terminated character string: 
char * message = malloc(count + 1); 
memcpy(message, chars, count); 
message[count] = 0; 
LOGD("NDK:LC: [%s]", message); 

// When you're done you must call this! 
(*env)->ReleaseCharArrayElements(env, arr, chars, 0); 
+0

같은 것을 쓰기 싶지만 대해서 GetMethodID 기능은 자바에 getReg_chal()를 인식 할 수 없습니다 . 그 던지는 오류 : DEBUG/dalvikvm (1365) : GetMethodID : 메서드를 찾을 수 없습니다 : Lcom/rohan/RegisterInfo; .getReg_chal() :() [C ..이 도와 줄 수 있습니다. 미리 감사드립니다. –

+1

이전에 그 사실을 알지 못했습니다. 그 괄호는 없어야합니다. 인수는 메서드 이름 "getReg_chal"이며 괄호는 없습니다. –

+0

어니스트에게 지적 해 주셔서 감사합니다. 마지막으로 한 가지만 도와주세요. getreg_chal()이 반환하는 값을 저장하고 인쇄하려고합니다. C 파일에 그 값을 저장하는 방법을 알려주십시오. 가능하면 JNI의 LOGD로 로그하십시오. –

관련 문제