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