我正在为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. Redis在windows平台上
- 6. 来自D2D1的Java JNA映射D2D1CreateFactory
- 7. JNA中BSTR数据类型的映射
- 8. 如何扩展JNA接口映射? (JAVA)
- 9. 爪哇JNA C++对方法映射
- 10. JNA直接vs接口映射?
- 11. 映射在Windows CE
- 12. Windows平台上的IP_TRANSPARENT
- 13. Universal WIndows平台上的Mono.data.sqlite
- 14. 在Windows上执行映射文件
- 15. Mac OS X上的UniChar正确的JNA映射是什么?
- 16. MongoDB是在Windows Azure平台上Azure平台
- 17. 将LPCWSTR投射到LPCSTR
- 18. easy_install M2Crypto在Windows平台上失败
- 19. getpid在Windows平台上的COBOL
- 20. 如何在Windows平台上使用Tarantool
- 21. Numpy.count_nonzero在64位Windows平台上崩溃
- 22. 在windows平台上使用libVLC for Android
- 23. Windows平台上的问题有关Windows平台上的静态库
- 24. 将平面映射到基元上
- 25. 平台“windows”
- 26. (非Windows)平台
- 27. PInvoke在Windows Mobile平台
- 28. Windows 8和Ninject:反射方法不能在当前平台上使用
- 29. Windows过滤平台
- 30. 映射之间的2台