Как я могу преобразовать xfunction Pointer в массив Java? - PullRequest
0 голосов
/ 22 марта 2012

У меня есть Java-приложение, которое отправляет указатель на функцию (обратный вызов) на какое-то собственное ядро ​​dll. Я использую библиотеку xfunction для манипуляций с нативным кодом. Я должен обрабатывать указатель int * как массив целых чисел в теле обратного вызова. На самом деле, у меня есть объект com.excelsior.xFunction.Pointer. Мне нужно сделать несколько трюков для преобразования массива com.excelsior.xFunction.Pointer => int []. Может ли помочь библиотека JNA (используя com.sun.jna.Pointer, IntByReference)?

Например, массив com.excelsior.xFunction.Pointer => com.sun.jna.Pointer => int []. Я не хочу переписывать код, чтобы исключить обращения к xfunction.

1 Ответ

0 голосов
/ 22 марта 2012

XFunction, по-видимому, не дает возможности вернуть собственный указатель. Так как он не имеет открытых источников, и их поддельный продукт - обфускатор Java, я думаю, вы застряли и не сможете сделать com.excelsior.xFunction.Pointer => com.sun.jna.Pointer.

Итак, как говорится (http://www.excelsior -usa.com / xfunction.html ):

Мы [...] рекомендуем вам сначала взглянуть на JNA

Думаю, вам лучше перекодировать эту часть вашего приложения в полную JNA, чтобы делать то, что вы хотите ... или придерживаться XFunction

В любом случае, если вам удастся найти способ получить исходный указатель XFunction, просто приведите его к Java long и передайте его new com.sun.jna.Pointer(long) JNA, а затем просто выполните com.sun.jna.Pointer.getIntArr(offset,arrayLength) для извлечения массива в чистом Java

...