Pessoal vejam esse simples programa em java que chama um método nativo recebendo como parâmetro o argumento args[] da linha de comando.
public class Data{
public static native void chamaData(String[] javaArgs);
static{
System.loadLibrary("dat");
}
public static void main(String args[]){
Data.chamaData(args);
}
}
Agora o programa em C usando JNI:
#include <stdio.h>
#include <stdlib.h>
#include "jni.h"
#include "Data.h"
JNIEXPORT void JNICALL Java_Data_chamaData(JNIEnv *jenv, jclass job, jobjectArray oarr){
//Obtem o tamanho do array (argc)
jsize argc = (*jenv)->GetArrayLength(jenv,oarr);
//Declara um array de char para argv
char const* argv[128];
int i;
jobject myObject;
const char *str;
for (i=1; i < argc+1; i++){
//Obtem cada objeto do array de objetos
myObject = (*jenv)->GetObjectArrayElement(jenv, oarr, i-1);
//Converte cada objeto em uma String
str = (*jenv)->GetStringUTFChars(jenv,myObject,0);
//Constroi o array argv
argv[i]=str;
printf("argv[%i] = %s\n", i, argv[i]);
}
//Incrementa argc para ajustar a diferença do número de argumentos entre Java e C
argc++;
//Com argc e argv construidos podemos escrever nosso programa
int mes;
char *nomemes[] = {"Janeiro", "Fevereiro", "Março", "Abril", "Maio", "Junho",
"Julho", "Agosto", "Setembro", "Outubro", "Novembro", "Dezembro"};
if (argc == 4){
mes = atoi(argv[2]);
if (mes<1 || mes >12)
printf("Erro!\nUso: data dia mes ano, todos inteiros");
else
printf("\n%s de %s de 19%s", argv[1], nomemes[mes-1], argv[3]);
}
else printf("Erro!\nUso: data dia mes ano, todos inteiros");
getchar();
return;
}
O código funciona muito bem, como não possuía argc e argv tive que construir. Achei um tuto na net que ensinava tudo ok. O problema é que construindo argv dessa forma eu não tenho acesso a argv[0] (o nome do programa). O que eu queria mesmo era poder acessar o endereço de memória de argv[0], ou seja, &argv[0].
Nesse programa que eu coloquei eu não preciso disso, mas tou fazendo aqui outro mais complexo em que eu tenho uma função que pede &argv[0] e não sei como faço pra ter acesso a ele!
Alguma ajuda?
.