C++의 네이티브 라이브러리를 Java에 래핑하는 과정에서 SWIGTYPE_p_ 클래스를 발견했습니다. SWIG 문서를 읽고, here의 답변을 따르면 SWIG가 C++ 데이터 유형으로 무엇을해야할지 모를 때 이러한 클래스를 생성한다는 것을 알게됩니다. 데이터 형식에 대한 포인터를 만들려고 시도하지만 이러한 SWIGTYPE 클래스는 기능적으로 쓸모없는 것처럼 보입니다.SWIGTPYE_p 데이터 형식 Java
내가 좋아하는 포인터에 대한적인 typemap을 .I 파일에 %include typemaps.i
을 넣어 사용했다 : 나는 또한 플로트 [] {[] 부동} 사용하여 시도
%apply char * {unsigned char *};
%apply float * {float *};
%apply int * {int *};
%apply int * {unsigned long *};
%apply short * {unsigned short *};
%apply byte * {byte *};
%apply long * {unsigned long long *};
.
그것이 잘못되는 곳의 예 : 방법에 클래스 CAN_PKT에
typedef union CAN_PKT_ {
unsigned long long all;
float f[2];
unsigned long ul[2];
unsigned short us[4];
unsigned char uc[8];
} CAN_PKT;
결과 set_f 등 set_all하지만 set_f SWIGTYPE_p_float 입력으로 받아들이고, SWITYPE_p_float가 swigCptr 및 swigCMemOwn 이외의 내용이 없다.
float []을 올바르게 typemapped하지 않은 것 같지만 실제로 어떻게해야하는지 그리고 왜 이해해야합니까?
편집 :이 유니언은 데이터 형식이 short
인 유일한 곳입니다. 이 파일을 .i 파일에서 제외하고 swig를 실행하면 이것을 볼 수 있습니다. SWIGTYPE_p_unsigned_short가 작성되지 않습니다. 하지만 유니온의 내용을 주석 처리하여 unsigned short
을 전혀 사용하지 않고이 파일을 swig에 포함 시키면 여전히 SWIGTYPE_p_unsigned_short가 생성됩니다. 왜 이런 일이 일어날 수 있겠습니까?