SWIG: преобразование java:byte[] в C:(void*)

Возможный дубликат:
Передать массив в обернутую функцию как указатель+размер или диапазон

В настоящее время я изучаю swig и играю с API C, чтобы обернуть stdio.h. Итак, файл моего парика выглядит так:

%module jstdio

%{
#include <stdio.h>
%}

FILE* fopen(const char* path, const char*  mode);
int fclose( FILE* fp);
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

Мой класс Java будет:

public class CFile
   {
   private SWIGTYPE_p_JSTDIO ptr;
   public CFile(String path,String mode) throws IOException
         {
         this.ptr=jstdio.fopen(path,mode);
         if(this.ptr==null) ... //throw...
         }
   (...)
   public int write(byte[] array,int pos,int length) throws IOException
        {
        (... here I should call jstdio.fwrite )
        }
   public int read(byte[] array,int pos,int length) throws IOException
        {
        (... here I should call jstdio.fread )
        }
   (...)
   }

теперь, для чтения/записи, как правильно сказать swig преобразовать мой java-массив байтов в (void*) ptr? Я думаю, что мне нужно использовать %typemap, но я не понимаю, как правильно его использовать?


person Pierre    schedule 17.12.2012    source источник
comment
Покрывает ли это stackoverflow.com/a/11584600/168175? Если нет, я напишу ответ здесь позже.   -  person Flexo    schedule 18.12.2012
comment
да! Я не нашел. Спасибо.   -  person Pierre    schedule 18.12.2012