Я создал следующую вспомогательную функцию, но я не могу заставить ее генерировать 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 в формате, с которым он может работать, без создания утечек памяти.
Я смог решить эту проблему, изменив свой шаблон на следующий, который является решением, которое я нашел по адресу 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"
wchar_t
для байта? Похоже, вы пытаетесь решить не ту проблему.