2016-05-03 4 views
0

Java:Как передать массив указателя на JNA?

Pointer[] myArray; 

myArrayis массив указателей.

C++

myfun(void** myArray){ 
    void *a = myArray[0]; 
} 

Как передать массив указатель на ЮНА? Я пробовал myfun(Pointer[] myArray) в Java, но он сообщил, что не поддерживает тип аргумента во время выполнения, как показано ниже: Вызвано: java.lang.IllegalArgumentException: class [Lcom.sun.jna.Pointer; не поддерживаемый тип аргументов (в методе myfun в классе com.xx.yy.zz)

+0

Включите ваше полное отображение ЮНА. 'Указатель []' _is_ поддерживается, но не обязательно в том контексте, в котором вы его использовали. – technomage

+0

Большое спасибо, кажется, что void ** в C++ может быть преобразован в Pointer [] в Java, но Pointer [] в Java не может быть преобразован в void ** в C++ –

ответ

0

спасибо, я решил эту проблему создать структуру в Java:

public class xxPointer extends Structure { 
    public Pointer myPointer; 

в C++:

struct xxPointer { 
    void* myPointer; 
}; 

интерфейс: в Java:

myFun(xxPointer.ByReference br); 

в C++:

myFun(xxPointer * xp) 

в Java:

xxPointer.ByReference rp = new xxPointer.ByReference(); 
xxPointer.ByReference pointers = (xxPointer[]) rRecord.toArray(array count); 
assignment value for pointers[i].myPointer 
myFun(rp);