首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

关于Record数据

2012-09-21 
关于Record数据求助在dll和应用程序中数据的定义:DtuDataStruct Record//DTU数据域add: sockaddr_in//I

关于Record数据求助
在dll和应用程序中数据的定义:
  DtuDataStruct = Record //DTU数据域
  add: sockaddr_in; //IP
  m_modemId: Integer; //ID号
  m_recv_time: TDateTime; //接收时间
  m_data_buf: Array[0..MAX_RECEIVE_BUF] of Byte; //数据缓存
  m_data_len: Word; //数据长度
  m_data_type: Byte; //数据类型
  m_end_pointer: Integer; //
  end;
  pDtuData = ^DtuDataStruct;


在dll中数据的导出:
procedure GPRSGetOneData(iIndex: Integer; dds: DtuDataStruct; stdcall;
begin
  dds := pDtuData(dtuDataList.Items[iIndex])^; //dtuDataList 是个TList
end;


应用程序这边:
procedure TConfigCollectorFrm.Timer2Timer(Sender: TObject);
var
  iEndPointer: Integer;
  iCount, I, J: Integer;
  dds: DtuDataStruct;
begin
  iCount := GPRSGetDataListCount;
  if iCount <= 0 then Exit;

  for I := 0 to iCount - 1 do
  begin
  GPRSGetOneData(I, dds);
  iEndPointer := dds.m_end_pointer;
  ......
  end;
end;

跟踪调试发现: dll中的m_end_pointer值是28,到了应用程序这个居然是:1953043412,可能还是我处理有问题只是还不知道应该怎么处理才能得到正确的数据?


[解决办法]
procedure GPRSGetOneData(iIndex: Integer; dds: DtuDataStruct); stdcall;
改成
procedure GPRSGetOneData(iIndex: Integer; var dds: DtuDataStruct); stdcall;

Dll和应用两边的定义都要改

热点排行