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! Encontros
O lugar certo para voc� encontrar aquela pessoa que falta na sua vida. Cadastre-se hoje mesmo!
