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++ :
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 //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; }
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 ?
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; }
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.
Partager