java - 如何使用 swig 在 C 和 Java 之间传递包含数组的结构体?

标签 java c android-ndk swig

我对 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/

相关文章:

java - 使用android中的Recycler View 同时与两组多图像进行数据绑定(bind)

java - 当 String 是有效的 char 时将 String 转换为 char

java - 使用 Java Spring i18n 翻译长文本的最佳实践

安卓NDK : How to handle Back key press in Cocos2dx?

java - 使用 JaxB 编码实现公共(public)接口(interface)的对象列表

c - strtol 使用 errno

c - 读取的文件和写入的文件不相同

android - 使用 JNI 在 C++ 中访问二维数组字段

android - 构建所有ABI,但仅打包一部分

c - OpenCV 上的逆向过滤——访问 DFT 值并乘以 DFT 矩阵