私はC++のDLLを持っており、その関数を呼び出してchar*
を返す必要があります。私はネイティブ宣言で文字列を使用していますが、????
のような出力や何かのものがあります。私は文字列をデコードする必要がありますか?私はすでに、このように私のシステムプロパティを設定している:元の文字列がUnicodeの場合C DLL内のchar *とJNAを使用したJava
System.setProperty("jna.encoding","UTF-8");
私はC++のDLLを持っており、その関数を呼び出してchar*
を返す必要があります。私はネイティブ宣言で文字列を使用していますが、????
のような出力や何かのものがあります。私は文字列をデコードする必要がありますか?私はすでに、このように私のシステムプロパティを設定している:元の文字列がUnicodeの場合C DLL内のchar *とJNAを使用したJava
System.setProperty("jna.encoding","UTF-8");
jna.encodingは効果がありません。代わりにcom.sun.jna.WStringを使用するか、unicode(wchar_t *)文字列を自動的にStringにマップする方法については、W32APIマッピングの例を参照してください。
Native.toString()
を使用して文字列をJavaに戻しましたか?
Stringの代わりにPointerを使用してから、ポインタのgetString(long offset)メソッドを使用して文字列を取得すると、jna.encodingが暗黙的に使用されます。
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);