2009-08-03 47 views
2

私はC++のDLLを持っており、その関数を呼び出してchar*を返す必要があります。私はネイティブ宣言で文字列を使用していますが、????のような出力や何かのものがあります。私は文字列をデコードする必要がありますか?私はすでに、このように私のシステムプロパティを設定している:元の文字列がUnicodeの場合C DLL内のchar *とJNAを使用したJava

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

答えて

0

jna.encodingは効果がありません。代わりにcom.sun.jna.WStringを使用するか、unicode(wchar_t *)文字列を自動的にStringにマップする方法については、W32APIマッピングの例を参照してください。

0

Native.toString()を使用して文字列をJavaに戻しましたか?

0

Stringの代わりにPointerを使用してから、ポインタのgetString(long offset)メソッドを使用して文字列を取得すると、jna.encodingが暗黙的に使用されます。

2
import com.sun.jna.*; 
C法から

のchar *戻り:

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

のchar * paramは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); 
関連する問題