在将 C++ 中的本机库包装到 Java 的过程中,我遇到了 SWIGTYPE_p_ 类。阅读 SWIG 文档,并按照这里的答案,我或多或少地理解 SWIG 会在它不知道如何处理 C++ 数据类型时生成这些类。它尝试创建指向数据类型的指针,但这些 SWIGTYPE 类似乎在功能上无用。
我已放入%include typemaps.i
.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 *};
我也尝试使用 float[] { float[] }。
出错的一个例子:
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_all、set_f 等的 CAN_PKT 类,但 set_f 接受 SWIGTYPE_p_float 作为输入,并且 SWITYPE_p_float 除了 swigCptr 和 swigCMemOwn 之外没有其他内容。
我想我没有正确地键入 float[],但我真的不明白应该怎么做,为什么?
编辑:short
这个联合是唯一使用数据类型的地方。我可以通过在 .i 文件中忽略此文件运行 swig 来显示这一点,SWIGTYPE_p_unsigned_short 没有创建。但是,如果我注释掉联合的内容,以便unsigned short
根本不在任何地方使用,并将这个文件包含到 swig 中,它仍然会创建 SWIGTYPE_p_unsigned_short。为什么会发生这种情况?