간단한 문제가있어서 대답을 찾지 못하는 것 같습니다. 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 다라고 생각한다.
작업 객체를 이렇게 전달할 수 있습니까?
메소드를 호출 할 객체에 대한 jobject 참조가 있습니까? – Daff
예. call.handler() 함수 호출의 리턴 유형입니다. 이 클래스는 기본적으로 객체를 보유하고 있으며이를 보유하고있는 C++ 객체와 동일한 수명을 갖도록 전역 참조를 작성합니다. 그것이 작동하지 않는다면 (그렇게하지 않은 경우), 나는 그보다 훨씬 빨리 오류가 발생합니다. – Gianni
언급 한 컴파일러의 경고는 무엇입니까? –