mpv_set_option_string
次のように定義されたC関数用のJNA Javaインターフェースがあります。
public interface MPV extends StdCallLibrary {
MPV INSTANCE = Native.loadLibrary("lib/mpv-1.dll", MPV.class, W32APIOptions.DEFAULT_OPTIONS);
long mpv_create();
int mpv_initialize(long handle);
int mpv_set_option_string(long handle, String name, String data);
}
これを次のように呼び出すと:
System.setProperty("jna.encoding", "UTF8");
long handle = MPV.INSTANCE.mpv_create();
int error = MPV.INSTANCE.mpv_initialize(handle);
error = MPV.INSTANCE.mpv_set_option_string(handle, "keep-open", "always");
-5
前回の呼び出しから、オプション ( keep-open
) が見つからないことを示すエラー ( ) が返されました。
ただし、JNA 関数の署名を次のように変更すると:
int mpv_set_option_string(long handle, byte[] name, byte[] data);
...そして、次のように呼び出します。
error = MPV.INSTANCE.mpv_set_option_string(
handle,
"keep-open\0".getBytes(StandardCharsets.UTF_8),
"always\0".getBytes(StandardCharsets.UTF_8)
);
...エラーは返されず ( 0
)、正しく動作します (またはそう思われます)。
私が得られないのは、JNAはUTF-8エンコーディングとString
同様にデフォルトでエンコードされ、終了することになっていますが(まさに私が手動で行っていることです)、それでも異なる結果が得られます。char *
NUL
これに光を当てることができる人はいますか?