2

C++ の DLL があり、その関数を呼び出す必要がありますchar*。ネイティブ宣言で文字列を使用していますが、出力のようなもの????やがらくたのものを取得しています。文字列をデコードする必要がありますか? 私はすでにシステム プロパティを次のように設定しています。

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

4 に答える 4

2
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);
于 2010-06-10T15:11:31.243 に答える
0

文字列の代わりにポインタを使用してから、ポインタのgetString(long offset)メソッドを使用して文字列を取得してください。設定されている場合は、暗黙的にjna.encodingを使用します。

于 2010-04-20T21:14:51.707 に答える
0

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

于 2009-09-06T15:47:06.937 に答える
0

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

于 2009-08-26T14:57:49.943 に答える