이 경우 속임수를 썼는지 :
%typemap(javabase) UserStream "com.jphysx.SWIGTYPE_p_NxStream";
가 나는 비슷한 문제를 가지고있는 래퍼 클래스의 몇 가지 방법이 있었다, 그러나 나는 단지에서 그들을 제거 SWIG 인터페이스 파일은 어쨌든 Java 코드에서 호출되지 않기 때문에.
: 은이 아닙니다. 래퍼 유형은 다른 래퍼 유형을 상속하므로 갑자기 두 개의swigCPtr
필드가 있습니다. 하위 유형에있는 하나가 초기화되고 상위 유형에있는 하나가 0
...으로 남아 있지만 이것은 수퍼 유형을 어딘가에서 사용할 때 사용됩니다.
편집 2 : 드디어 SWIGTYPE_p_NxStream
객체에 UserStream
개체를 변환하는 자바 래퍼 클래스에 메서드를 추가하여 문제를 해결 :
이 JNI 방법은 꿀꺽 꿀꺽의 외부에서 손으로 쓴
%typemap(javacode) UserStream %{
public native com.JPhysX.SWIGTYPE_p_NxStream toNxStreamPtr();
%}
물건 :
JNIEXPORT jobject JNICALL Java_physics_UserStream_toNxStreamPtr(JNIEnv *env, jobject userStreamObject) {
jclass userStreamClass = env->GetObjectClass(userStreamObject);
jmethodID getCPtrMethodID = env->GetStaticMethodID(userStreamClass, "getCPtr", "(Lphysics/UserStream;)J");
jlong cPtr = env->CallStaticLongMethod(userStreamClass, getCPtrMethodID, userStreamObject);
jboolean futureUse = false;
jclass nxStreamPtrClass = env->FindClass("com/JPhysX/SWIGTYPE_p_NxStream");
jmethodID nxStreamPtrConstructor = env->GetMethodID(nxStreamPtrClass, "<init>", "(JZ)V");
jobject nxStreamPtrObject = env->NewObject(nxStreamPtrClass, nxStreamPtrConstructor, cPtr, futureUse);
return nxStreamPtrObject;
}