我有两个C函数,我通过SWIG暴露给我的Java层,并且都有一个带有const void *数据类型(“val”)的输入参数,需要为addCategory函数的uint8_t但是为char addAttribute函数。我目前在SWIG接口文件中,使用%apply将const void * C类型映射到Java端的short。有没有办法修改SWIG接口文件以支持char (String)和const void *输入参数的uint8_t(short)?
头文件中的C函数:
int
addCategory(query_t *query, type_t type, const void *val);
int
addAttribute(query_t *query, type_t type, const void *val);
SWIG接口文件:
%module Example
%include "stdint.i"
void setPhy_idx(uint32_t value);
%include "arrays_java.i"
void setId(unsigned char *value);
%{
#include "Example.h"
%}
%apply char * { unsigned char * };
%apply char * { void * };
%apply uint8_t { const void * }
%apply int32_t { int32_t * }
%include "Example.h"
答案 0 :(得分:0)
你不能直接这样做 - 在Java中这个地方会使用什么类型?您需要帮助SWIG以某种方式决定。
您(至少)有三种可能的解决方案:
%rename
使它们重新进入Java中的重载。使用union
。这将由SWIG编写set
和get
函数:
%module test
union values {
unsigned char *string;
void *generic;
uint8_t someOtherThing;
uint32_t number;
};
void func(values v);
这会产生一个名为values
的Java类,func()
占用并可以通过union的其中一个成员。显然,您需要为%apply
的成员union
提供适当的字体图。