雪域离歌 2014-07-22 02:02 采纳率: 0%
浏览 3517

最近用JNA技术,实现java调用C++的DLL,如何用java模拟c++的链表结构体。

C++结构体
struct CUser_DataStruct
{
char pKKSCoding[128]; //标签点Kks编码
DWORD time; //UTC时间
WORD millisecond; //毫秒
int nDataState; //数据状态
double dValue; //数值
CUser_DataStruct* pNext; //指向下一个数据节点的指针
};

C++的入口函数说明
Bool DataUp (CUser_DataStruct FPointArray[], int DataNumber,bool bCover);
参数:CUser_DataStruct FPointArray[]:输入参数,用户上传数据的结构体
int DataNumber:输入参数,数组的大小
bool bCover:输入参数,数据上传标识位,当为 true 时,表示上传数据可以覆盖
原有数据;当为 false 时,表示上传数据不可以覆盖原有数据
功能:数据上传接口
返回值:成功 true,失败 false

我的java模拟类
public class UserData extends Structure {

 public byte[] pKKSCoding =new byte[128];
 public int    nDataState;
 public Double DValue;
 public int   time;
 public short    millisecond;


 public UserData.ByReference PUserDataStruct;
 public static   class ByReference extends UserData implements Structure.ByReference{}
 public static   class ByValue extends UserData implements Structure.ByValue{}

 @Override
protected List getFieldOrder() {
    // TODO Auto-generated method stub
    return Arrays.asList(new String[]{"pKKSCoding","nDataState","DValue","time","millisecond","PUserDataStruct"});
}

代码实现部分
int nCount=2;
String TagName="NY001\0";
UserData.ByReference[] UserDataStruct= new UserData.ByReference[nCount];
for (int i=0;i<nCount;i++){

UserDataStruct[i]=new UserData.ByReference();
UserDataStruct[i].pKKSCoding=TagName.getBytes();
//取当前UTC
String lCurrentTime=String.valueOf(System.currentTimeMillis());

//截取到秒级
UserDataStruct[i].time=Integer.parseInt(lCurrentTime.substring(0, lCurrentTime.length()-3));
//截取后三位毫秒数
UserDataStruct[i].millisecond=Short.parseShort(lCurrentTime.substring(lCurrentTime.length()-3,lCurrentTime.length()));

UserDataStruct[i].nDataState=1;
UserDataStruct[i].DValue=(double) 456+i;
//链表指针
UserDataStruct[i].PUserDataStruct=new UserData.ByReference();
UserDataStruct[i].write();
}
result=Clientdll.Instanse.DataUp(UserDataStruct, nCount, true);

请各位大神帮忙指点指点

  • 写回答

1条回答

  • zyq890817 2014-12-15 03:53
    关注
    最近也遇到这些问题了,最后怎么解决的啊~~~
    
    评论

报告相同问题?

悬赏问题

  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能