痛饮:通字节数组在Java中为C [英] Swig: pass byte array in Java to C

查看:168
本文介绍了痛饮:通字节数组在Java中为C的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建Java实现使用痛饮传递的byte []为C。

痛饮:

 %包括typemaps.i
%适用(字符*字符串,整数长度){(字符* BUFF,INT LEN)};
%一致 {
   typedef结构{
        字符* BUFF;
        INT LEN;
  } workit_t;
}

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

Java的:

 公共无效setBuff(字符串值){
 ...
}

我是什么,我痛饮定义做错了什么?

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

痛饮:

 %包括typemaps.i
%适用(字符*字符串,整数长度){(字符* BUFF1,为int * LEN1)};

Java的:

 公共静态无效Mathit(字节[] BUFF1,字节[] buff2){
...
}


解决方案

好了,我已经能够得到它的权利。

 %包括typemaps.i
%适用(字符*字符串,整数长度){(字符* BUFF,INT LEN)};
%一致 {
   typedef结构{
        字符* BUFF;
        INT LEN;
  } workit_t;
}

现在

 %包括various.i
%申请的char * BYTE {字符* BUFF}; //映射一个Java byte []数组一个C字符数组
%一致 {
   typedef结构{
        字符* BUFF;
        INT LEN;
   } workit_t;
}

或者

 %包括various.i
%申请的char * NIOBUFFER {字符* BUFF}; //地图的Java NIO的缓冲区为C字符数组
%一致 {
   typedef结构{
        字符* BUFF;
        INT LEN;
   } workit_t;
}

I am trying to create Java implementation for passing byte [] to C using Swig.

Swig:

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

In my generated java class (workit_t.java), the parameter buff is a String, instead of a byte [].

Java:

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

What am I doing wrong in my swig definition?

When I write a simple swig definition with no struct, I get the desired type of parameter.

Swig:

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

Java:

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

解决方案

Well, I have been able to get it right.

Before:

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

Now:

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

Or:

%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中为C的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆