Swig:将Java中的字节数组传递给C语言

时间:2016-06-13 23:14:51

标签: java c arrays java-native-interface swig

我正在尝试创建Java实现,以便使用Swig将byte []传递给C.

痛饮:

%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 []。

爪哇:

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

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

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

痛饮:

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

爪哇:

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

1 个答案:

答案 0 :(得分:0)

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

在:

%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;
}