我对 Swig 有一些办法,但上面的问题对我来说是一个阻碍。我有一个相当复杂的结构,其中包含我的应用程序数据,我需要在 ndroid NDK 中的 C 代码和顶层应用程序的 Java 代码之间传递它。
结构如下:
typedef struct
{
uint16_t x1;
char s1[4][16];
char s2[4][16];
char s3[4][16];
uint32_t x2[4];
} MY_STRUCT;
它显然具有多维数组和结构类型的邪恶组合,我尝试了一些方法,但没有任何效果。
我需要能够在 Java 和 C 代码中设置和获取数组中的值,谁能告诉我实现此目标应遵循的一般策略?
谢谢
嘘
最佳答案
您可能应该构建一组访问器:
%inline %{
void MY_STRUCT_x1_set(struct MY_STRUCT *obj, uint_16 val) {
obj->x1 = val;
}
void MY_STRUCT_s1_set(struct MY_STRUCT *obj, int i, int j, char val) {
obj->s1[i][j] = val;
}
char MY_STRUCT_s2_get(struct MY_STRUCT *obj, int i, int j) {
return obj->s2[i][j];
}
%}
...等等。这样您就可以从 Java(通过生成的包装器)完全访问您的结构。
请注意,SWIG 不会执行越界或可能因滥用包装器代码而违反的其他条件。
关于java - 如何使用 swig 在 C 和 Java 之间传递包含数组的结构体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25164769/