새 스파이 래퍼를 작성할 때 기존 SWIG 포장지를 참조합니다

StackOverflow https://stackoverflow.com/questions/255068

  •  05-07-2019
  •  | 
  •  

문제

기존 C ++ 라이브러리 (Physx)를위한 Java 래퍼 인 기존 라이브러리 (JPhysx)가 있습니다. Java 라이브러리는 예를 들어 SWIG에 의해 생성 된 유형을 사용합니다. com.jphysx.SWIGTYPE_p_NxStream, 이는 An에 대한 포인터를 나타냅니다 NxStream C ++ 코드의 개체. 이제 C ++ 유형에서 상속되는 내 자신의 C ++ 클래스를 만들고 싶습니다. NxStream, 그리고 내 수업을위한 Java 래퍼도 래퍼에서 상속받습니다. com.jphysx.SWIGTYPE_p_NxStream.

문제는 수업을 위해 래퍼를 생성하기 위해 Swig에 전화를 걸 때 새로운 래퍼를 만든다는 것입니다. SWIGTYPE_p_NxStream, 기능적으로 동일합니다 com.jphysx, 그러나 Java에 관한 한 여전히 다른 유형입니다.

Swig 가이 기존 래퍼를 재사용하도록 어떻게 설득 할 수 있습니까? com.jphysx 그리고 내 수업의 래퍼를 상속받습니다 com.jphysx.SWIGTYPE_p_NxStream 대신에?

도움이 되었습니까?

해결책

래퍼 클래스가 원하는 유형에서 명시 적으로 상속되도록하는 것은이 경우 트릭을 수행했습니다.

%typemap(javabase) UserStream "com.jphysx.SWIGTYPE_p_NxStream";

래퍼 클래스에는 비슷한 문제가있는 몇 가지 방법이 있었지만 어쨌든 Java 코드에서 호출되지 않기 때문에 SWIG 인터페이스 파일에서 간단히 제거했습니다.

편집하다: 이건 그렇습니다 ~ 아니다 일하다. 래퍼 유형은 다른 래퍼 유형에서 상속되기 때문에 갑자기 swigCPtr 필드. 하위 유형의 하나는 초기화되고, 슈퍼 유형의 하나는 남아 있습니다. 0...하지만 이것은 슈퍼 타입을 어딘가에 사용할 때 사용되는 것입니다.

편집 2: 마침내 Java Wrapper 클래스에 메소드를 추가하여 변환하여 문제를 해결했습니다. UserStream A에 반대 SWIGTYPE_p_NxStream 물체:

%typemap(javacode) UserStream %{
    public native com.JPhysX.SWIGTYPE_p_NxStream toNxStreamPtr();
%}

이 JNI 방법은 Swig의 것들 밖에서 손으로 쓴 것입니다.

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;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top