2011-05-10 3 views
3

간단한 문제가있어서 대답을 찾지 못하는 것 같습니다. C++에서 객체를 취하는 Java의 메소드를 호출해야하는 메소드를 작성했습니다.JNI : C++에서 Object를 취하는 메서드를 호출하십시오.

public class MyClass { 

    public class ReturnType { 
    ... 
    } 

    public void methodToBeCalledFromC(ReturnType obj) { 
    ... 
    } 
} 

을 그리고 내 C++가있다 : 예를 들어, 내 자바 코드가

const jclass classID = s_env->FindClass(className); 
const jmethodID methodID = s_env->GetMethodID(classID, "methodToBeCalledFromC", "(LMyClass;)V"); 

// The call.handler() function returns a reference to the ReturnType object 
// This produces a compilier warning and causes a seg-fault. 
s_env->CallVoidMethod(call.handler(), jmid, userInfo); 

나는 CLASSID와 methodID뿐만 아니라 call.handler() 아니라 내가가 NewGlobalRef()라는 가지고 jbject을 반환 확인했습니다 , 그래서 나는 그것이 모두 ok 다라고 생각한다.

작업 객체를 이렇게 전달할 수 있습니까?

+0

메소드를 호출 할 객체에 대한 jobject 참조가 있습니까? – Daff

+0

예. call.handler() 함수 호출의 리턴 유형입니다. 이 클래스는 기본적으로 객체를 보유하고 있으며이를 보유하고있는 C++ 객체와 동일한 수명을 갖도록 전역 참조를 작성합니다. 그것이 작동하지 않는다면 (그렇게하지 않은 경우), 나는 그보다 훨씬 빨리 오류가 발생합니다. – Gianni

+2

언급 한 컴파일러의 경고는 무엇입니까? –

답변

3

컴파일러 경고를 확인하십시오 - 중요한 사항을 알려줄 수 있습니다!

+0

경고 : 경고 : 'POD 유형이 아닌'클래스 UserInfo '의 객체를'... '을 통해 전달할 수 없습니다. 호출은 런타임에 중단됩니다. – Gianni

관련 문제