2011-10-04 3 views
0

JNI를 사용하여 Android에서 비 정적 메소드를 호출하려고합니다. CallStaticVoidMethod을 사용하여 정적 메서드를 호출 할 수 있습니다. 비 정적 메소드를 호출하기 위해 CallVoidMethod을 사용했습니다. 그것은 작동하지 않습니다.JNI에서 Android의 nonstatic 메소드 호출

아무도 안드로이드의 nonStatic 메서드를 호출하려면 올바른 코드를 말해 줄 수 있습니까? JNI에서?

jmethodID method = env->GetMethodID(gJniRefCached.ImsFwkLoaderClass, "DispVideo", "([BII)V"); 

env-> CallVoidMethod (gJniRefCached.ImsFwkLoaderClass, 방법, 도착, 폭, 높이);

는 또한 jclass cls = env->GetObjectClass(obj); jmethodID method = env->GetMethodID(cls, "DispVideo", "([BII)V"); env->CallVoidMethod(cls, method,arr,width,height);

+3

당신이 한 일에 대해 조금 더 말해야합니다. 작동하지 않는 코드를 보여주십시오. – ThomasW

+0

코드를 붙여 넣었습니다. 이제 제발 도와주세요 ... – geeta

+0

호출하려는 메서드의 메서드 시그니처는 무엇입니까? 그것은 값을 반환합니까? – ThomasW

답변

6

인스턴스 메소드를 호출하기 위해, 당신은 클래스의 인스턴스에게 jobject로 표현하는 방법의 belng에를 제공 할 필요가있는 코드는 클래스의 객체를 사용하여 시도했다. 그러나 두 예제 모두에서 jclass으로 표시된 클래스 정의의 인스턴스로 인스턴스 메소드를 호출하려고합니다.

jclass cls = env->GetObjectClass(obj); 
jmethodID method = env->GetMethodID(cls, "DispVideo", "([BII)V"); 
env->CallVoidMethod(obj, method, arr, width, height); 

주 내가 첫 번째 매개 변수로 obj를 사용하는 코드의 세 번째 줄에 미묘한 차이, 대신 cls의 :

은 다음보십시오.

당신은 인스턴스 메소드 JNI 함수에 대한 설명서 페이지에이 차이를 볼 수 있습니다

: GetMethodIDCall<type>Method 모두에서 http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html#wp16656

봐 - 한 다른 jobject 소요 jclass합니다.

+0

덕분에 .. 지금은 일하고 ... – geeta