2009-08-03 9 views
2

Ich habe eine DLL von C++ und ich muss seine Funktion aufrufen, die char* zurückgibt. Ich verwende String in der nativen Deklaration, aber Ausgabe wie ???? oder etwas Mist Sache. Muss ich den String decodieren? Ich habe bereits mein System Eigenschaft wie folgt festgelegt:Map char * in C DLL zu Java mit JNA

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

Antwort

0

jna.encoding keine Wirkung, wenn die ursprüngliche Zeichenfolge Unicode ist. Sie müssen stattdessen com.sun.jna.WString verwenden oder die Beispiel-W32API-Zuordnungen für die automatische Zuordnung von Unicode-Strings (wchar_t *) zu String anzeigen.

0

Haben Sie Native.toString() verwendet, um die Zeichenfolge zurück in Java zu konvertieren?

0

Versuchen Sie, einen Zeiger anstelle von String zu verwenden, und verwenden Sie dann die Methode getString (long offset) des Zeigers, um die Zeichenfolge abzurufen. Implizit wird die jna.encoding-Eigenschaft verwendet, falls sie festgelegt ist.

2
import com.sun.jna.*; 

char * Return from C Methode:

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

char * Param in C-Methode übergeben:

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