Probleme avec la fonction GetStringChars

darkspoilt Messages postés 254 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 10 octobre 2013 - 20 sept. 2007 à 14:45
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 20 sept. 2007 à 18:10
bonjour j'ai des souci de compilation avec cette ligne

JNIEXPORT jboolean JNICALL Java_Jni2_verif (JNIEnv* env,jobject j,jstring login,jstring pass)
{
const char* id;
id=(*env)->GetStringUTFChars(env,login,&vf);
}

voila l'erreur
\log.c base operand of `->' has non-pointer type `JNIEnv_'

8 réponses

cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
20 sept. 2007 à 14:58
salut,

ca doit etre plutot
id=env->GetStringUTFChars(env,login,&vf);
ou
id=(*env).GetStringUTFChars(env,login,&vf);

@++
0
darkspoilt Messages postés 254 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 10 octobre 2013
20 sept. 2007 à 15:03
J'ai utilisé les deux cela ne fonctionne pas
J'ai déclaré vf comme suit
jboolean vf
Est ce bon??

Ah moisn que cela soit autre chose mais je vais pas afficher tout le code quand meme
meme s'il fait que 57 lignes
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
20 sept. 2007 à 15:11
j'ai pas vérifié si l'info etait bonne:
http://forum.java.sun.com/thread.jspa?threadID=380339
@++
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
20 sept. 2007 à 16:15
Salut,

tu est en C ou C++ ? parce que ça change....

exemple en C :
(*env)->GetStringUTFChars(env, login,&vf);

exemple en C++:
env->GetStringUTFChars(login,&vf);

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
darkspoilt Messages postés 254 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 10 octobre 2013
20 sept. 2007 à 16:26
Je suis en C c'est pour passer deux chaine de caractere mot de passe et identifiant et faire la vérification en C avec le JNI
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
20 sept. 2007 à 16:42
Salut,

space quand même perso je n'ai jamais eu ce problème, aussi bien en C ou C++

exemple qui compile et fonctionne :

JNIEXPORT void JNICALL Java_org_linux_sound_Mixer_setDeviceName(JNIEnv *env, jclass cls, jstring jdevice) {
    (*env)->ExceptionClear(env);
    jboolean isCopy;
    const char* utf_device = (*env)->GetStringUTFChars(env, jdevice, &isCopy);
    if((*env)->ExceptionOccurred(env)) {
        (*env)->ExceptionDescribe(env);
        (*env)->ExceptionClear(env);
        return;
    }
    [...]
    if(isCopy == JNI_TRUE)

        (*env)->ReleaseStringUTFChars(env, jdevice, utf_device);
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
darkspoilt Messages postés 254 Date d'inscription jeudi 13 janvier 2005 Statut Membre Dernière intervention 10 octobre 2013
20 sept. 2007 à 17:54
voila ce ke j'ai codé moi

#include <stdio.h>
#include <malloc.h>
#include "VerifLogin.h"
#define LONG_MAX 64




JNIEXPORT jboolean JNICALL Java_Jni2_verif (JNIEnv* env,jobject j,jstring login,jstring pass)
{
    int n=2;
    const char* id;
    const char* mdp;
    char chaine[LONG_MAX];
    char* bon;
    jboolean vf;
    FILE* fichier;
    fichier=fopen("mdp.txt","r");
    id=(*env)->GetStringUTFChars(env,login,0);
   
    if(vf!=JNI_TRUE)
    {
  puts("Probleme au chargement du login.");
  return;
    }
   
    mdp=(*env)->GetStringUTFChars(env,pass,0);
   
    if(vf!=JNI_TRUE)
    {
  puts("Probleme au chargement du mot de passe.");
  return;
    }
   
    n+=strlen(id)+strlen(mdp);
    strcpy(chaine,id);
    strcat(chaine,"/");
    strcat(chaine,mdp);
    strcat(chaine,"\n");
    (*env)->ReleaseStringUTFChars(env,login,id);
    (*env)->ReleaseStringUTFChars(env,pass,mdp);
    bon=(char*)malloc(LONG_MAX*sizeof(char));
    do
    {
  fgets(bon,LONG_MAX,fichier);
  if(!strcmp(bon,chaine))
  {
      puts("Identification reussie.");
      fclose(fichier);
      return JNI_TRUE;
  }
    }
    while(!feof(fichier));
    puts("Erreur identification.");
    fclose(fichier);
    return JNI_FALSE;
}
}
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
20 sept. 2007 à 18:10
Salut,

ça ne risque pas de régler ton problème mais voici quelques points sur ton code :

pourquoi tu fais :
id= (*env)->GetStringUTFChars(env,login,0);
if(vf!=JNI_TRUE)
    [...]

vu que tu n'utilises pas 'vf'... normalement tu devrais faire
id=(*env)->GetStringUTFChars(env,login, &vf );
if(vf! =JNI_FALSE)
    //error

si 'vf' vaut JNI_TRUE alors la copie est bonne et tu peux relacher les ressources :
(*env)->ReleaseStringUTFChars(env,login,id);

tu fais :
n+=strlen(id)+strlen(mdp);
mais normalement tu devrais faire
size_t size = (*env)->GetStringUTFLength(env, id);

Oublie pas que le sting que tu obtiens(const char*) provient d'un string UTF (char = 2octets)

Pour ton problème de "base operand of `->' has non-pointer type `JNIEnv_' " tu peux donner ta ligne de compilation, exemple tu ne serais pas entrain de compiler avec g++ plutot que gcc ? si toute fois tu utilise un compilo GNU...

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
Rejoignez-nous