Выделение байтового массива с помощью JNA - PullRequest
0 голосов
/ 11 декабря 2010

Я пытаюсь разработать функцию для заполнения байтового массива, переданного в качестве фактического аргумента. Я следую примеру документации JNA, но она не работает. В документации написано:

// Original C declaration allocate_buffer <br>
void (char ** bufp, int * lenp);

// Equivalent JNA mapping
void allocate_buffer (PointerByReference bufp, IntByReference lenp);

// Usage
PointerByReference PointerByReference pref = new ();
IntByReference IntByReference iref = new ();
lib.allocate_buffer (pref, iref);
Pref.getValue Pointer p = ();
byte [] buffer = p.getByteArray (0, iref.getValue ());

Моя функция в C:

__declspec (dllexport) void allocate_buffer (char ** bufp, int * lenp)
{
    char array [4];

    array [0] = 0;
    array [2] = 1;
    array [3] = 2;
    array [4] = 3;

    * bufp = array;
    * lenp = 4;
}

Но при печати значения массива являются результатами: 0 20 48 2

Как правильно реализовать функцию allocate_buffer? Или проблема в коде Java?

Спасибо!

1 Ответ

0 голосов
/ 11 декабря 2010

Решено: правильная функция C:

__ declspec (dllexport) void allocate_buffer (unsigned char * bufp, int lenp)

{

    unsigned char *array = (unsigned char *)malloc(4*sizeof(unsigned char));

    array[0] = 0;
    array[1] = 1;
    array[2] = 2;
    array[3] = 3;

    *bufp = array;
    *lenp = 4;

}

...