2009-08-03 5 views
2

J'ai une DLL de C++ et je dois appeler sa fonction qui renvoie char*. Im using la chaîne dans la déclaration native mais obtenant la production comme ???? ou quelque chose de merde. Dois-je décoder la chaîne? Je l'ai déjà mis ma propriété système comme celui-ci:Carte char * en C DLL en Java avec JNA

System.setProperty("jna.encoding","UTF-8"); 

Répondre

0

jna.encoding n'a aucun effet si la chaîne d'origine est unicode. Vous devez utiliser com.sun.jna.WString à la place ou voir les exemples de mappages W32API pour savoir comment mapper automatiquement les chaînes unicode (wchar_t *) à String.

0

Avez-vous utilisé Native.toString() pour convertir la chaîne en Java?

0

Essayez d'utiliser un pointeur au lieu de chaîne, puis utilisez la méthode getString (décalage long) de pointeur pour obtenir la chaîne, il utilise implicitement le jna.encoding si défini.

2
import com.sun.jna.*; 

char * Rendement de la méthode C:

Pointer myFunc(); 
Pointer ptr = myFunc(); 
String str = ptr.getString(0); 
str = str.substring(0, str.indexOf(0)); //Remove garbage after null char 

char * Param de passer dans la méthode C:

void myFunc(Pointer ptr); 
String str = "hello world"; 
Memory mem = new Memory(str.length()); 
mem.write(0, str.getBytes(), 0, str.length()); 
myFunc(mem);