我正在爲JNA調用一個用於C/C++的DLL API。 DLL中的函數API是短DKT_init(LPCSTR名稱)。我將相應的java方法作爲public DKT_init(String name);但是當我調用它時,DLL API返回一個參數錯誤。我想知道如何在JNA中映射LPCSTR?由於LPCSTR是cons char *,但String是char *。JNA在Windows平臺上映射LPCSTR
1
A
回答
0
您是否嘗試過將其映射到一個字節數組,像這樣:
short DKT_INIT(byte [] nameAsByteArray);
//now you should be able to obtain it like this:
System.out.println(new String(nameAsByteArray).trim());
1
字符串是LPCSTR適當的映射。 JNA將使用默認平臺編碼將修改後的UTF16字符轉換爲NUL終止的字節緩衝區。
您可以嘗試傳入一個明確的字節數組(使用上面建議的備用方法映射),這將消除不正確編碼問題的可能性,例如,
byte[] arg = { (byte)'f', (byte)'o', (byte)'o', (byte)0 };
您可以通過設置系統屬性「jna.encoding」來改變編碼。
您還應該消除「LPCSTR」實際上是錯誤類型的可能性;如果函數需要一個可以寫入的緩衝區,則String將不起作用,如果它實際上是LPTCSTR並且正在使用UNICODE,則需要傳遞一個WString。
相關問題
- 1. JNA指針,指針映射
- 2. JNA聯合結構映射
- 3. 如何在JNA中映射枚舉
- 4. 原則:在Windows上映射,但在Linux上映射
- 5. JNA中BSTR數據類型的映射
- 6. 來自D2D1的Java JNA映射D2D1CreateFactory
- 7. 如何擴展JNA接口映射? (JAVA)
- 8. 映射在Windows CE
- 9. Universal WIndows平臺上的Mono.data.sqlite
- 10. 在Windows上執行映射文件
- 11. 將LPCWSTR投射到LPCSTR
- 12. MongoDB是在Windows Azure平臺上Azure平臺
- 13. Mac OS X上的UniChar正確的JNA映射是什麼?
- 14. Numpy.count_nonzero在64位Windows平臺上崩潰
- 15. Windows平臺上的問題有關Windows平臺上的靜態庫
- 16. 將平面映射到基元上
- 17. 平臺「windows」
- 18. Windows 8和Ninject:反射方法不能在當前平臺上使用
- 19. Windows過濾平臺
- 20. 在一臺計算機上找不到Qt平臺插件「windows」
- 21. Windows平臺上的音頻/視頻流
- 22. Boot2Docker/Windows平臺上的圖支持
- 23. Windows Phone 7平臺上的IMSI?
- 24. 平臺無關的內存映射[文件] IO
- 25. 如何在Windows平臺上在Android上調試本機代碼
- 26. RestKit映射在後臺釋放嗎?
- 27. Linux- Windows時區映射?
- 28. Windows內存映射文件
- 29. 使用函數指針爲C結構創建JNA映射
- 30. 如何將指針映射到JNA中的結構陣列