Bonjour à tous,

Je débute en Java et JNA. J'utilise une fonction C++ qui me renvoie une chaine de caractère.
Voici le code C++ :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
//libJNA.h
 
#ifdef __cplusplus
extern "C" {
#endif
 
DLLEXP int onTheFly(int input, char** output, int& outputLenght);
 
#ifdef __cplusplus
}
#endif
//libJNA.cpp
Com action;
int onTheFly(int input,  char** output, int& outputLenght ) {
    string result = "";
    int exitCode = action.recall(input, result);
    //return of result
    outputLenght = (int)result.length()+1;
    *output = (char*)malloc(outputLenght * sizeof(char));
    strcpy(*output, result.c_str());
    cout << "Resultat : " << *output <<endl;
    return exitCode;
}
Voici le code JAVA :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
public String onTheFly(int input) {
    String res= "";
    PointerByReference ptr = new PointerByReference();
    IntByReference outputLenght = new IntByReference();
    int ftStatus = FT_STATUS.OTHER_ERROR.ordinal();
    switch (architecture) {
      case ARCH_32b:
        ftStatus = lib32bits.onTheFly(input, ptr, outputLenght);
        break;
      case ARCH_64b:
        ftStatus = lib64bits.onTheFly(input, ptr, outputLenght);
        break;
      default:
        Logger.error("No architecture defined: '" + architecture + "'");
        break;
 
    }
 
    int lengthFinal = outputLenght.getValue();
    if (0 < lengthFinal) {
      // extract the pointed-to pointer
      res= ptr.getPointer().getString(0);
    }
    return res;
  }
Tout d'abord, est ce que c'est la meilleur façon pour utiliser des chaines de caractères native avec des chaine de caractère Java ?
Actuellement, le résultat me retourne des valeurs de caractères non initialisés. quelle est votre analyse sur ce problème ?

Je vous remercie pour votre aide.