我创建了以下帮助函数,但是我无法生成一个接受字节数组作为输入的java接口。
size_t get_p_wchar_t_bytes(wchar_t *wstr, char * bytes, size_t len)
{
size_t wlen,cpylen;
wlen = count_p_wchar_t_bytes(wstr);
cpylen = len > wlen ? wlen : len;
memcpy(bytes, wstr, cpylen);
return cpylen;
}
size_t count_p_wchar_t_bytes(wchar_t *wstr)
{
return wcslen(wstr) * sizeof(wchar_t);
}
我在模板中定义了以下内容
%include "arrays_java.i"
%apply int[] {int *};
%include "wchar.i"
这个问题是char *被转换为“String”而不是字节数组,这是无用的。
public static long get_p_wchar_t_bytes(SWIGTYPE_p_wchar_t wstr, String bytes, long len)
我想要的是swig的输出是这个......
public static long get_p_wchar_t_bytes(SWIGTYPE_p_wchar_t wstr, byte[] bytes, long len)
那我该怎么做呢?最终,我只需要一种方法将w_char_t数组以一种可以使用的格式传递给java,而不会产生任何内存泄漏。
答案 0 :(得分:1)
我能够通过将模板更改为以下内容来解决此问题,这是我在http://swig.10945.n7.nabble.com/Converting-char-to-byte-String-in-Java-td276.html找到的解决方案
// knows about things like int *OUTPUT:
%include "typemaps.i"
// knows about int32_t
%include "stdint.i"
%include "arrays_java.i"
%apply int[] {int *};
// convert char * to byte array
%apply signed char[] {char* pchar};
%include "wchar.i"