Pessoal, como fa�o para enviar/ receber par�metros por
refer�ncia utilizando o JNI?

Exemplo:

no Java envio :

char [] env = new char[128];

int rec = DLLTeste(env);

no C recebo:


DLLTeste(char *)
{
   .... 
}

Como eu fa�o para que consiga preencher minha vari�vel
env? Sei que quando passo char[] a convers�o em
C � char*, mas como devolvo o conte�do como refer�ncia? Com passagem de
valor est� funcionando tudo ok, j� consegui fazer
funcionar um leitora de c�digo de barras, mas
para receber os valores por refer�ncia estou tendo
problemas.

J� fiz a mesma coisa utilizando o J/Direct do J++,
mas como isso � Micro$oft e utilizei somente para
teste, agora s� estou aproveitando as convers�es
de tipo (Java/C), que tenho prontas.

A partir de outros exemplos que encontrei, consegui fazer o seguinte para utilizar refer�ncia:

Lado JAVA:

...
public native static int JFuncTeste(Object [][] s, int t);
private static Object [][] lS = new Object[128][0];
public static void main(String[] args) {
...
int recVal = JFuncTeste(lS,0);

System.out.println("oArry[0][0]= " + lS[0][0]);

Lado C:

JNIEXPORT jint JNICALL Java_Teste_JFuncTeste
(JNIEnv * env, jclass thisClazz, jobjectArray arr, jint x)
{
 char Buffer[128];
 int recLCB,j;

 jint sz = env->GetArrayLength(arr);

  recLCB = LeMinhaDLL(Buffer,x);

  jclass sclazz = env->FindClass("java/lang/String");

  jobjectArray sarr = env->NewObjectArray(sz, sclazz, NULL);

  env->SetObjectArrayElement(arr, x, sarr);

  jstring jstr = env->NewStringUTF(Buffer);

  jint el_sz = env->GetArrayLength(sarr);
  for (j = 0; j < el_sz; j++)
   env->SetObjectArrayElement(sarr, j, jstr);
 

   return recLCB;
}

Desta forma, consigo obter o conte�do por refer�ncia, mas
gostaria de saber se existe uma maneira mais simplificada do
que utilizar matriz de matriz (simula��o de matriz bi-dimensional
do Java).

Muito obrigado,

Renato.



Yahoo! Empregos
O trabalho dos seus sonhos pode estar aqui. Cadastre-se hoje mesmo no Yahoo! Empregos e tenha acesso a milhares de vagas abertas!

Responder a