получить указатель байтового массива в jna - PullRequest
6 голосов
/ 09 марта 2011

У меня есть следующий код в C # и мне нужна аналогичная функциональность в Java с использованием JNA:

IntPtr pImage = SerializeByteArrayToIntPtr(imageData);

public static IntPtr SerializeByteArrayToIntPtr(byte[] arr)
        {
            IntPtr ptr = IntPtr.Zero;
            if (arr != null && arr.Length > 0)
            {
                ptr = Marshal.AllocHGlobal(arr.Length);
                Marshal.Copy(arr, 0, ptr, arr.Length);
            }
            return ptr;
        }

1 Ответ

8 голосов
/ 22 марта 2011

Вы хотите использовать Память

Используйте его следующим образом:

// allocate sufficient native memory to hold the java array
Pointer ptr = new Memory(arr.length);

// Copy the java array's contents to the native memory
ptr.write(0, arr, 0, arr.length);

Имейте в виду, что вам необходимо сохранять сильную ссылку на объект Памяти дляПока нативный код, который будет использовать память, нуждается в этом (в противном случае объект Memory будет восстанавливать нативную память при ее сборке мусора).

Если вам требуется больший контроль над жизненным циклом нативной памяти, тоотобразите в malloc () и free () из libc и используйте их вместо этого.

...