[JNA] Meilleur façon de fournir un string C++ en resultat.
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:
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:
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.