java jna 调用第三方dll结构体传参问题

问题遇到的现象和发生背景

使用java jna 调用第三方dll结构体传参问题

问题相关代码,请勿粘贴截图

dll的方法:

BOOL NET_ECMS_XMLConfig(  
  LONG                   lUserID,
  LPNET_EHOME_XML_CFG    pXmlCfg,  
  DWORD                  dwConfigSize);

LPNET_EHOME_XML_CFG 是结构体:

struct{  
  void     *pCmdBuf;  
  DWORD    dwCmdLen;  
  void     *pInBuf;
  DWORD    dwInSize;  
  void     *pOutBuf;  
  DWORD    dwOutSize;
  DWORD    dwSendTimeOut;  
  DWORD    dwRecvTimeOut;  
  BYTE     byRes[32];
}NET_EHOME_XML_CFG, *LPNET_EHOME_XML_CFG;

我的代码:
NET_EHOME_XML_CFG结构体对应的类:

public static class NET_EHOME_XML_CFG extends Structure {
        public Pointer pCmdBuf;    //字符串格式命令,参见1.2.3
        public int dwCmdLen;   //pCmdBuf长度
        public Pointer pInBuf;     //输入数据,远程配置报文公用定义
        public int dwInSize;   //输入数据长度
        public Pointer pOutBuf;    //输出缓冲<ConfigXML>
        public int dwOutSize;  //输出缓冲区长度
        public int dwSendTimeOut;  //数据发送超时时间,单位ms,默认5s
        public int dwRecvTimeOut;  //数据接收超时时间,单位ms,默认5s
        public Pointer pStatusBuf;     //返回的状态参数(XML格式),如果不需要,可以置NULL
        public int dwStatusSize;   //状态缓冲区大小(内存大小)
        public byte[] byRes = new byte[24];

    }

调用过程:

 NativeLong userId=new NativeLong(0);
        HCEHomeCMS.NET_EHOME_XML_CFG NET_EHOME_XML_CFG = new HCEHomeCMS.NET_EHOME_XML_CFG();


        //命令
        String cmd = "********";
        Pointer cmdBuff = new Memory(cmd.length()+1);
        cmdBuff.setString(0,cmd);

        System.out.println("cmdBuff.getString="+cmdBuff.getString(0));

        Pointer outBuff = new Memory(1024);


        NET_EHOME_XML_CFG.pCmdBuf=cmdBuff;

        NET_EHOME_XML_CFG.dwCmdLen = cmd.length();


        String params = "**********";

        Pointer paramsBuff = new Memory(params.length()+1);
        paramsBuff.setString(0,params);
        NET_EHOME_XML_CFG.pInBuf=paramsBuff;
        NET_EHOME_XML_CFG.dwInSize=params.length();
        NET_EHOME_XML_CFG.pOutBuf = outBuff;
        NET_EHOME_XML_CFG.dwOutSize = 1024;
        NET_EHOME_XML_CFG.dwSendTimeOut=10;
        NET_EHOME_XML_CFG.dwRecvTimeOut=10;
        NET_EHOME_XML_CFG.pStatusBuf = null;
        NET_EHOME_XML_CFG.dwStatusSize=1024;
        NET_EHOME_XML_CFG.byRes = "0".getBytes();

        NET_EHOME_XML_CFG.write();

        System.out.println("cmdBuff.getString="+cmdBuff.getString(0));
        System.out.println("paramsBuff.getString="+paramsBuff.getString(0));

        boolean isDown= hCEhomeCMS.NET_ECMS_XMLConfig(userId,NET_EHOME_XML_CFG,NET_EHOME_XML_CFG.size());
        System.out.println("isDown="+isDown);
        if (!isDown){
            System.out.println("NET_ECMS_XMLConfig failed, error code:" + hCEhomeCMS.NET_ECMS_GetLastError());
        }

运行结果及报错内容

运行返回参数错误;

我是第一次用jna,不是很懂,是不是我参数没传进去
有解答一下吗

可以参考一下,忘有帮助

字节对齐惹的祸?