![](/img/trans.png)
[英]FTDI library platform differences between Mac and Windows when using JNA
[英]JNA mapping LPCSTR on windows platform
我正在使用JNA調用C / C ++的一個DLL API。 DLL中的函數API是DKT_init(LPCSTR名稱)的縮寫。 我將相應的java方法設置為public short DKT_init(String name); 但是當我調用它時,DLL API返回一個參數錯誤。 我想知道如何在JNA中映射LPCSTR? 由於LPCSTR是cons char *,而String是char *。
字符串是LPCSTR的適當映射。 JNA將使用默認平台編碼將修改后的UTF16字符轉換為NUL終止的字節緩沖區。
您可以嘗試傳入一個顯式字節數組來代替(使用上面建議的替代方法映射),這樣可以消除出現編碼錯誤的可能性,例如
byte[] arg = { (byte)'f', (byte)'o', (byte)'o', (byte)0 };
您可以通過設置系統屬性“ jna.encoding”來更改使用的編碼。
您還應該消除“ LPCSTR”實際上是錯誤類型的可能性; 如果函數期望它可以寫入的緩沖區,則String將不起作用,並且如果它實際上是LPTCSTR並且您正在使用UNICODE,則需要傳遞WString來代替。
您是否嘗試過將其映射到字節數組,如下所示:
short DKT_INIT(byte [] nameAsByteArray);
//now you should be able to obtain it like this:
System.out.println(new String(nameAsByteArray).trim());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.