在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,可能还是我处理有问题只是还不知道应该怎么处理才能得到正确的数据?
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; var dds: DtuDataStruct); stdcall;Dll和应用两边的定义都要改