2

JNAを使用してC/C++用の1つのDLLAPIを呼び出す作業をしています。DLLの関数APIは短いDKT_init(LPCSTR名)です。対応するJavaメソッドをpublicshortDKT_init(String name);として作成しました。しかし、私がそれを呼び出すと、DLLAPIはパラメータエラーを返します。JNAでLPCSTRをマッピングする方法を知りたいですか?LPCSTRはconschar*ですが、Stringはchar*です。

4

2 に答える 2

3

文字列は、LPCSTR の適切なマッピングです。JNA は、デフォルトのプラットフォーム エンコーディングを使用して、変更された UTF16 文字を NUL で終了するバイト バッファに変換します。

代わりに明示的なバイト配列を渡してみてください (上記で推奨されている代替方法のマッピングを使用)。

byte[] arg = { (byte)'f', (byte)'o', (byte)'o', (byte)0 };

システムプロパティ「jna.encoding」を設定することで、使用されるエンコーディングを変更できます。

また、「LPCSTR」が実際には正しくない型である可能性も排除する必要があります。関数が書き込み可能なバッファを想定している場合、String は機能しません。実際に LPTCSTR であり、UNICODE を使用している場合は、代わりに WString を渡す必要があります。

于 2011-12-11T14:08:44.130 に答える
1

次のように、バイト配列にマッピングしてみましたか。

short DKT_INIT(byte [] nameAsByteArray);
//now you should be able to obtain it like this:
System.out.println(new String(nameAsByteArray).trim());
于 2010-11-18T16:43:52.170 に答える