[quote=gillianoPE][quote]O problema é que em java não tem byte não sinalizado (0 -255).
Leia aqui para entender melhor a dor de cabeça que isso causa. Você vai precisar desse texto.
http://www.darksleep.com/player/JavaAndUnsignedTypes.html[/quote]
Obrigado, juliocbq. Realmente era o que eu estava procurando. Agora já consigo acessar o ponteiro passado como parâmetro por referência. Como java não possui o tipo sem sinal, então tive que operar diretamente nos bits. Tive que fazer assim:
int a = 1;
boolean b = true;
char c = 'a';
IntByReference aPtr = new IntByReference();
IntByReference bPtr = new IntByReference();
PointerByReference cPtr = new PointerByReference();
int w = lib.funcaoAgoraVai(a, b, c, aPtr, bPtr, cPtr);
Pointer p = cPtr.getPointer();
byte[] baite = p.getByteArray(0, 4);
int temp;
short[] retornoUnsignedChar = new short[baite.length];
for(int i=0 ; i < baite.length ; i++)
{
temp = (0x000000FF & ((int)baite[i]));
retornoUnsignedChar[i] = (short) temp;
}
for(int j=0 ; j<retornoUnsignedChar.length ; j++)
System.out.println("unsigned char " + j + " : " + retornoUnsignedChar[j]);
No entanto, mesmo quando o array de “unsigned char” possui mais de 4 parâmetros, eu não consigo acessar o quinto elemento, por exemplo. No trecho do código onde há uma chamada a byte[] baite = p.getByteArray(0, 4); se eu trocar por byte[] baite = p.getByteArray(0, 5);, É lançada a excessão: java.lang.IndexOutOfBoundsException. Alguém tem ideia por que está acontecendo isso?[/quote]
Então giliano, acho que agora vc marcou. É o seguinte:
digamos que seu vetor de vetor de bytes, que é um ponteiro para um ponteiro (usigned char** pt), ou seja uma matriz possui mais de 4 elementos ok?
O índice de procura sempre começa em 0(zero). O quinto elemento seria p.getByteArray(0,4), e não p.getByteArray(0,5). É a idéia que tive quando vi seu código. Para ter certeza, use um breakpoint, depure e observe o que existe dentro do seu ponteiro.