【问题标题】:JNA mapping LPCSTR on windows platformJNA在windows平台上映射LPCSTR
【发布时间】:2023-03-18 03:47:01
【问题描述】:

我正在使用 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 *。

【问题讨论】:

    标签: java mapping jna lpcstr


    【解决方案1】:

    字符串是 LPCSTR 的适当映射。 JNA 将使用默认平台编码将修改后的 UTF16 字符转换为以 NUL 结尾的字节缓冲区。

    您可以尝试传入一个显式字节数组(使用上面建议的替代方法映射),这将消除潜在的不正确编码问题,例如

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

    您可以通过设置系统属性“jna.encoding”来更改使用的编码。

    您还应该消除“LPCSTR”实际上是错误类型的可能性;如果函数需要一个可以写入的缓冲区,则 String 将不起作用,如果它实际上是 LPTCSTR 并且您使用的是 UNICODE,那么您需要传递一个 WString 来代替。

    【讨论】:

      【解决方案2】:

      您是否尝试过将其映射到字节数组,如下所示:

      short DKT_INIT(byte [] nameAsByteArray);
      //now you should be able to obtain it like this:
      System.out.println(new String(nameAsByteArray).trim());
      

      【讨论】:

        猜你喜欢
        • 2019-04-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-19
        • 2019-09-22
        • 1970-01-01
        • 2011-05-04
        • 1970-01-01
        相关资源
        最近更新 更多