簡體   English   中英

JNA在Windows平台上映射LPCSTR

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM