В процессе переноса собственной библиотеки в C++ на Java я сталкивался с классами SWIGTYPE_p_. Чтение документов SWIG и после ответа от here я более или менее понимаю, что SWIG генерирует эти классы, когда он не знает, что делать с типом данных C++. Он пытается создать указатель на тип данных, но эти классы SWIGTYPE кажутся функционально бесполезными.Типы данных SWIGTPYE_p Java
Я поставил %include typemaps.i
в .i файл, и используется typemaps для указателей, как:
%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 *};
Я также попытался с помощью поплавка [] {поплавок []}.
Пример, где он идет неправильно:
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;
приводит к классу CAN_PKT с методами set_all, Set_F и т.д., но Set_F принимает SWIGTYPE_p_float в качестве входных данных, и SWITYPE_p_float не имеет, кроме swigCptr и swigCMemOwn содержимого.
Наверное, я не правильно поменял float [], но я действительно не понимаю, как это должно быть сделано и почему?
EDIT: Этот союз является единственным местом, где используется тип данных short
. Я могу показать это, запустив swig с этим файлом, оставшимся из файла .i, SWIGTYPE_p_unsigned_short не создается. НО, если я прокомментирую содержимое союза, так что unsigned short
нигде не используется и включает этот файл в swig, он все равно создает SWIGTYPE_p_unsigned_short. Почему это могло произойти?