java - Swig:将 Java 中的字节数组传递给 C

标签 java c arrays java-native-interface swig

我正在尝试创建使用 Swig 将 byte [] 传递给 C 的 Java 实现。

痛饮:

%include "typemaps.i"
%apply(char *STRING, int LENGTH) { (char *buff, int len) }; 
%inline {
   typedef struct {
        char*         buff;        
        int           len;  
  } workit_t;
}

在我生成的java类(workit_t.java)中,参数buff是一个String,而不是byte[]。

Java:

public void setBuff(String value){
 ... 
}

我在 swig 定义中做错了什么?

当我编写一个没有结构的简单 swig 定义时,我得到了所需的参数类型。

痛饮:

%include "typemaps.i"
%apply(char *STRING, int LENGTH) { (char *buff1, int *len1) };

Java:

public static void Mathit(byte[] buff1, byte[] buff2) {
...
}

最佳答案

好吧,我已经能够做对了。

之前:

%include "typemaps.i"
%apply(char *STRING, int LENGTH) { (char *buff, int len) }; 
%inline {
   typedef struct {
        char*         buff;        
        int           len;  
  } workit_t;
}

现在:

%include various.i                    
%apply char *BYTE { char *buff };  //map a Java byte[] array to a C char array
%inline {
   typedef struct {
        char*         buff;        
        int           len;  
   } workit_t;
}

或者:

%include various.i                    
%apply char *NIOBUFFER { char *buff }; //map Java nio buffers to C char array
%inline {
   typedef struct {
        char*         buff;        
        int           len;  
   } workit_t;
}

关于java - Swig:将 Java 中的字节数组传递给 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37800592/

相关文章:

c++ - C++ 中 ^ 运算符的作用是什么

c++ - 使用 googletest(Google C++ 测试框架)测试 C 代码

ios - NSMutableArray 和复制

arrays - 从矩阵中获取每一行的不同列

java - 使用java中的比较器自定义排序

java - EMR 集群在 AWS 控制台 UI 上不可见

c - USSD代码的AT命令

arrays - 按属性对EmberJS对象数组进行排序

java - 需要在 Java 中将两个由英尺和英寸组成的对象添加在一起

java - Stanford NLP - 无效的字符常量